我遇到了一个非常奇怪的错误信息,只有当我添加以下代码到我的项目中时才会出现:
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 GUI。
如果我将代码行更改为:
std::list<CRect*> myVar;
但我不想仅仅为了破解而去破解。
此外,变量是在栈上还是堆上创建都无关紧要,我仍然会得到相同的错误。
有没有任何人对此有任何想法?我正在使用Microsoft Visual Studio 2008 SP1和Vista Enterprise。
编辑:上面的链接器错误是std::list<>构造函数的错误,我还会得到析构函数、_Nextnode和clear函数的错误。
编辑:在项目的其他文件中,std::vector无法链接,在其他文件中可能是std::list。我无法弄清楚为什么有些容器可以工作,有些容器却不能。MFC链接在两个库中都是静态的。在低级库中,我们有1个继承自std::list的类。
编辑:低级库中没有任何继承自CRect的类,但它确实使用STL。