我正在尝试在 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.
CMemDCImpl 有一个头文件,其中包含类 CMemDCImpl 的所有成员的定义,以及 *.cpp 文件及其实现。请帮我修复这个错误。
您提到 CMemDCImpl 是在 cpp 文件中定义的。然而,它似乎也在 uafxcwd.lib (您显然使用的库)中定义。
我可以想到这个错误的两种可能性:
- 您正在包含您尝试使用的库的 cpp。通常,当您使用预编译库时,只需在链接时引用自己的源文件中的头文件和库即可。您是否有可能将库的源 .cpp 文件包含在您自己的项目中?如果是这种情况,只需从项目中删除源 .cpp 文件即可。
- 您正在定义一个自己的类,该类与您在库中引用的类具有相同的名称,并且存在名称冲突。解决此问题的首选方法是将您自己定义的类封装在命名空间中:
.
namespace Foo
{
class CMemDC
{
// ...
};
}
// Usage:
Foo::CMemDC myMemDC;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)