在 2 个 dll 之间使用 QMap 时出现LNK2005和LNK1169错误



我有一个关于LNK2005 &MSVC 2015 (Qt 5.12.6)上的LNK1169错误

我的错误是:
Core.lib(Core.dll) : error LNK2005: "public: __cdecl QMap<int,double>::~QMap<int,double>(void)" (??1?$QMap@HN@@QEAA@XZ) already defined in xxx.obj

我有错误,当我试图编译一个库(命名为AAA)库AAA使用Core.dll,两者都使用第二个名为Common.dll的库。类型QMap<int,double>在每个库中使用。

当我看到xxx。obj(位于AAA),我对QMap<int,double>的唯一用法是当我使用返回QMap并位于Core.dll

的函数时。我在核心中定义了很多函数,并在AAA中使用,但我以前从未见过这个错误。

我检查了很多事情:试图用QVector改变QMap,相同类型的错误。我没有任何"include cpp"文件。当我使用Clang或GCC编译项目时,我没有错误。如果我使用QMap<int,double>*,我不会有错误,但我不想

我认为这是一个与qmap模板相关的错误,但我不确定

你有主意吗?由于

Ps:我已经更改了第三个库(AAA)的名称,因为这是我用于我的工作的代码,不能分享关于它的很多东西

所以,我通过替换QMap<int,>由位于第三个库中的另一个对象。我见过QMap<int,>

但我不知道是否有编译器(MSVC2015)或我的代码的问题。

我已经使用了这些网站来帮助我:

  • https://forum.qt.io/topic/43408/error-lnk2005-when-deriving-from-qvariantmap
  • http://web.archive.org/web/20090323151858/https://mareq.com/2008/10/exporting-non-template-class-inherited.html

最新更新