gpt4 book ai didi

visual-studio-2008 - 奇怪的 MFC/VC++ 链接器错误(std::list 已定义)

转载 作者:行者123 更新时间:2023-12-05 01:32:37 26 4
gpt4 key购买 nike

我收到一条非常奇怪的错误消息,只有在我将以下行添加到我的项目时才会出现:

std::list<CRect> myVar;

值得注意的是,它不一定是 std::list,它可以是 std::vector 或我假设的任何其他 STL 容器。

这是错误信息:

Error 1 error LNK2005: "public: __thiscall std::list

::list >(void)" (??0?$list@VCRect@@V?$allocator@VCRect@@@std@@@std@@QAE@XZ) already defined in SomeLowLevelLibrary.lib

错误消息中引用的低级库不知道我正在构建的项目,它只有核心低级功能,不处理高级 MFC GUI。

如果我将代码行更改为:

,我可以使链接器错误消失:

std::list<CRect*> myVar;

但我不想为了它而破解它。

另外,不管我是在栈上还是堆上创建变量,我仍然会得到同样的错误。

有人对此有任何想法吗?我在 Vista Enterprise 上使用 Microsoft Visual Studio 2008 SP1。

编辑:上面的链接器错误是针对 std::list<> 构造函数的,我也遇到了针对析构函数、_Nextnode 和清除函数的错误。

编辑: 在项目的其他文件中,std::vector 不会链接,在其他文件中它可能是 std::list。我无法弄清楚为什么有些容器可以工作,而有些则不能。 MFC 链接在两个库中都是静态的。在低级库中,我们有 1 个继承自 std::list 的类。

编辑:低级库没有任何继承自 CRect 的类,但它确实使用了 STL。

最佳答案

您应该查看链接器设置,但我不能立即说出是哪一个。 STL实例化在多个文件中完成是正常的。链接器应该选择一个。它们都是相同的(假设您确实具有一致的编译器设置)。

关于visual-studio-2008 - 奇怪的 MFC/VC++ 链接器错误(std::list<CRect> 已定义),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/148178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com