Visual C 中的 LNK 2005在 Visual Studio 2010 中
我正在尝试在 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 文件及其实现。请帮我修复这个错误。
I'm trying to compile a C++ program, written using Visual C++ 2005 and MFC, in MS VS 2010. Sadly I'm getting the following error during compilation:
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 has a header file which contains definitions of all members of the class CMemDCImpl, and *.cpp file with their implementations. Please help me to fix this error.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您提到 CMemDCImpl 是在 cpp 文件中定义的。然而,它似乎也在 uafxcwd.lib (您显然使用的库)中定义。
我可以想到此错误的两种可能性:
。
You mention that you CMemDCImpl is defined in a cpp file. However, it also seems to be defined in uafxcwd.lib (a library you apparently use).
I can think of two possibilities for this error:
.
没有实际的代码,我们只能猜测。您很可能已经执行了以下操作之一:
CMemDC::~CMemDC() {}
两次,可能是复制粘贴但未重命名为CMemDCImpl::~CMemDCImpl()
CMemDC
类定义之后的头文件中实现CMemDC::~CMemDC()
,而不是在类定义中Without the actual code, we can only guess. Most likely you have done one of these:
CMemDC::~CMemDC() {}
twice, maybe a copy-paste that you didn't rename toCMemDCImpl::~CMemDCImpl()
CMemDC::~CMemDC()
in a header file afterCMemDC
class definition instead of in the class definition我使用的解决方案:将众所周知且广泛使用的 CMemDC 类重命名为 CMemDc
因为 Microsoft 粉碎了它,而 Keith 或我们自己没有对其拥有版权?!?
在vs2k10中微软竟然敢用一些狗屎来碾压Keith的CMemDC类的名字。
昨天出生的 Microsoft 家伙:这是自 1997 年以来每个人都使用的最受欢迎的课程之一! 恶心!微软,你真丢脸!
CMemDc - 内存 DC
// 作者:Keith Rule
// 电子邮件:[电子邮件受保护]
// 版权所有 1996-1997,Keith Rule
谢谢 Keith!那些“后门”的“新”和“灾难性”家伙希望我们改变我们拥有的每个来源中的每个“CMemDC”..真是可惜
Solution I use : rename the well known and well used CMemDC class in something as CMemDc
because Microsoft crushed it and Keith or ourselves have not copyrighted it ?!?
in vs2k10 Microsoft dared to crush the name of the CMemDC class of Keith, with some shit.
Yesterday born Microsoft guys : this it's one of the most popular classes that everyone uses since 1997! Gross! Shame on you, Microsoft !
CMemDc - memory DC
// Author: Keith Rule
// Email: [email protected]
// Copyright 1996-1997, Keith Rule
Thank You Keith ! Those "new" and "catastrophic" guys of "the after-Gates" want us to change every "CMemDC" in every sources we have.. What a shame