我是 Visual C++ 的新手,但之前使用过 C++。我已经花了几天时间解决这个问题,所以非常感谢任何帮助。
我继承了一个重要的 VC6 代码库,我正在尝试编译并链接到更新的编译器。底层dll项目正在编译和链接,exe项目正在编译但没有链接。我收到类似这样的错误...
MyBaseLib.lib(MyBaseLib.dll) : error LNK2005: "public: __thiscall ATL::CWindowImplRoot<class ATL::CWindow>::CWindowImplRoot<class ATL::CWindow>(void)" (??0?$CWindowImplRoot@VCWindow@ATL@@@ATL@@QAE@XZ) already defined in ClassInMyExe.obj
我注意到 exe 和有问题的 MyBaseLib.dll 中都有使用 ATL 的类,特别是从 CDialogImpl<..> 继承的类。我已经引用了类似的问题,但我没有看到答案 - 我不认为它像错误地插入头文件中的类定义一样简单。
我在 VS2010 和 VS2005 环境中都遇到相同的错误。
最佳答案
确保您使用的所有库都是使用相同的编译器和相同的 c|cpp 运行时库(/MT 或/MD)编译的。如果还剩下一些旧库,则可能会发生这种情况。
关于c++ - LNK2005 - ATL 基类符号已定义 - 根本原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6519124/