Visual Studio 2010中的Visual C++中的LNK 2005

And*_*rey 7 c++ linker-errors lnk2005

我正在尝试编译在MS VS 2010中使用Visual C++ 2005和MFC编写的C++程序.遗憾的是,我在编译期间遇到以下错误:

Error 2 error LNK2005: "public: virtual __thiscall CMemDC::~CMemDC(void)" (??1CMemDC@@UAE@XZ) already defined in CMemDCImpl.obj Project\Project\Project\uafxcwd.lib(afxglobals.obj) Project.
Run Code Online (Sandbox Code Playgroud)

CMemDCImpl有一个头文件,其中包含类CMemDCImpl的所有成员的定义,以及包含其实现的*.cpp文件.请帮我修复此错误.

joc*_*oce 6

您提到CMemDCImpl是在cpp文件中定义的.但是,它似乎也在uafxcwd.lib(您显然使用的库)中定义.我可以想到这个错误的两种可能性:

  1. 您要包含您尝试使用的库的cpp.通常,在使用预编译库时,只需在链接时引用自己的源文件和库中的头文件.是否有可能在您自己的项目中包含库的源.cpp文件?如果是这种情况,只需从项目中删除源.cpp文件即可.
  2. 您正在定义一个自己的类,它与您在库中引用的类名称相同,并且您有一个名称冲突.解决此问题的首选方法是将您自己定义的类封装在命名空间中:

.

namespace Foo
{
    class CMemDC
    {
        // ...
    };
}

// Usage:
Foo::CMemDC myMemDC;
Run Code Online (Sandbox Code Playgroud)