【发布时间】:2008-09-29 10:18:09
【问题描述】:
我收到一条非常奇怪的错误消息,仅在我将以下行添加到我的项目时才会出现:
std::list<CRect> myVar;
值得注意的是,它不一定是 std::list,它可以是 std::vector 或我假设的任何其他 STL 容器。
这是错误信息:
错误 1 错误 LNK2005:“公共: __thiscall std::list
::list >(void)" (??0?$list@VCRect@@V?$allocator@VCRect@@@std@@@std@@QAE@XZ) 已经定义在 SomeLowLevelLibrary.lib
错误消息中引用的低级库不知道我正在构建的项目,它只有核心低级功能,不处理高级 MFC GUI。
如果我将代码行更改为:
std::list<CRect*> myVar;
但我不想为了它而破解它。
另外,不管我是在堆栈还是堆上创建变量,我仍然会得到同样的错误。
有人对此有任何想法吗? 我在 Vista Enterprise 上使用 Microsoft Visual Studio 2008 SP1。
编辑: 上面的链接器错误是针对 std::list 构造函数的,我也收到了针对析构函数、_Nextnode 和 clear 函数的错误。
编辑: 在项目的其他文件中,std::vector 不会链接,在其他文件中它可能是 std::list。我无法弄清楚为什么有些容器可以工作,而有些则不能。 MFC 链接在两个库中都是静态的。在低级库中,我们有 1 个继承自 std::list 的类。
编辑:低级库没有任何继承自 CRect 的类,但它确实使用了 STL。
【问题讨论】:
-
你有 SomeLowLevelLibrary.lib 的代码吗?如果是这样,请浏览 list
的源代码并查看您得到的回报。 -
您能否提供有关与您的项目和 SomeLowLevelLibrary.lib 的 MFC 库(静态、共享)的链接的信息。
标签: visual-studio-2008 mfc linker