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