У меня действительно странное сообщение об ошибке, которое появляется только тогда, когда я добавляю следующую строку в свой проект:
std::list<CRect> myVar;
Стоит отметить, что это не обязательно должен быть std::list, это может быть std::vector или любой другой контейнер STL, как я предполагаю.
Вот сообщение об ошибке:
Ошибка 1 ошибка LNK2005: "public: __thiscall std::list
::list >(void)" (??0?$list@VCRect@@V?$allocator@VCRect@@@std@@@std@@QAE@XZ), уже определенный в SomeLowLevelLibrary.lib
Библиотека низкого уровня, на которую ссылается сообщение об ошибке, не имеет представления о проекте, который я создаю, она имеет только основные функции низкого уровня и не работает с графическими интерфейсами MFC высокого уровня.
Я могу избавиться от ошибки компоновщика, если изменю строку кода на:
std::list<CRect*> myVar;
Но я не хочу взламывать его ради этого.
Кроме того, не имеет значения, создаю ли я переменную в стеке или в куче, я все равно получаю ту же ошибку.
У кого-нибудь есть какие-нибудь идеи по этому поводу? Я использую Microsoft Visual Studio 2008 SP1 на Vista Enterprise.
Редактировать: ошибка компоновщика выше для конструктора std::list‹>, я также получаю ошибку для деструктора, _Nextnode и четких функций.
Изменить: в других файлах проекта std::vector не будет связываться, в других файлах это может быть std::list. Я не могу понять, почему одни контейнеры работают, а другие нет. Связывание MFC является статическим в обеих библиотеках. В низкоуровневой библиотеке у нас есть 1 класс, который наследуется от std::list.
Изменить: в библиотеке низкого уровня нет классов, наследуемых от CRect, но она использует STL.