c++ - LNK2005 - ATL 基类符号已定义 - 根本原因是什么?

标签 c++ visual-studio

我是 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/

相关文章:

c++ - 在 IsClassT<T> 中,为什么使用 "int C::*"?我对 int 类型感到困惑

.net - 找不到文件或程序集System.ServiceModel.DomainServices.Client.Web

c++ - 打开 C++ 崩溃转储不会在调用堆栈中显示正确的行

c# - 导入 C# 应用程序的 C++ DLL

c++ - 从 Canny 检测和标记端点

c++ - 在C++中获取数字的所有组合

c# - 如何将文本文件中的值分配给 Visual Studio C#?

c# - 在 Visual Studio 2010 C# 项目中设置调试/运行环境变量?

c++ - 如何确定我的程序需要运行哪些 C++ 可再发行组件?

c++ - "?"帮助按钮触发 WM_HELP _and_ WM_LBUTTONUP