LNK2005-已定义ATL基类符号-根本原因是什么? 我是Visual C++的NOOB,以前使用过C++。我已经在这个问题上花了好几天时间,所以非常感谢您的帮助

LNK2005-已定义ATL基类符号-根本原因是什么? 我是Visual C++的NOOB,以前使用过C++。我已经在这个问题上花了好几天时间,所以非常感谢您的帮助,c++,visual-studio,C++,Visual Studio,我继承了一个重要的VC6代码库,我正试图编译它并与一个更新的编译器链接。底层dll项目正在编译和链接,exe项目正在编译但未链接。我得到的错误看起来像这样 MyBaseLib.lib(MyBaseLib.dll) : error LNK2005: "public: __thiscall ATL::CWindowImplRoot<class ATL::CWindow>::CWindowImplRoot<class ATL::CWindow>(void)" (??0?$CWi

我继承了一个重要的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
MyBaseLib.lib(MyBaseLib.dll):错误LNK2005:“public:u thiscall ATL::CWindowImplRoot::CWindowImplRoot(void)”(?0$CWindowImplRoot@VCWindow@ATL@@@ATL@@QAE@XZ)已在ClassInMyExe.obj中定义
我注意到exe和有问题的MyBaseLib.dll中都有使用ATL的类,特别是从CDialogImpl继承的类。我已经引用了类似的问题,但我没有看到答案——我不认为它像错误地将类定义插入头文件那样简单


我在VS2010和VS2005环境中都遇到相同的错误

确保使用的所有库都使用相同的编译器和相同的c | cpp运行库(/MT或/MD)编译。如果还剩下一些旧库,这种情况可能会发生

我继承了一个重要的VC6代码库

这可能是错误的原因

VC++2003/2005/2008中有许多突破性的变化。VC6.0ATL源代码通常与VC++2003或更高版本不兼容

请查看以下MSDN页面:


我控制的所有库(即从解决方案中的项目构建的库)都是使用/MDd编译的。通常,当模板类编译成不同的ASM代码时,会发生此错误。由于构造函数中存在错误,所以调用内存分配函数应该有问题,例如调用不同版本的函数。因此,您还应该查看路径,例如,如果您试图将使用/mdd编译的库与使用/md编译的库链接,则也会出现此错误。是否存在诸如“使用msvcr*.lib”与其他库冲突之类的警告