VC++2010中派生CDC类的问题

时间:2023-05-12 17:45:49
快过春节了,装个VS2010尝尝鲜,不想遇到以上问题,具体是新建一个类继承至CDC的CMemDC类,在XScrollBar.h中我包含了CMemDC类,结果出现如下错误,我尝试过在编译时先生成nafxcw.lib库,但错误结果仍然。
1>nafxcw.lib(afxglobals.obj) : error LNK2005: "public: virtual __thiscall CMemDC::~CMemDC(void)" (??1CMemDC@@UAE@XZ) 已经在 XScrollBar.obj 中定义
1>D:\hp.exe:fatal error LNK1169: 找到一个或多个多重定义的符号

祝所有CSDN朋友新年快乐,兔年大吉,六六大顺!

10 个解决方案

#1


引用楼主 lcy_888 的回复:
快过春节了,装个VS2010尝尝鲜,不想遇到以上问题,具体是新建一个类继承至CDC的CMemDC类,在XScrollBar.h中我包含了CMemDC类,结果出现如下错误,我尝试过在编译时先生成nafxcw.lib库,但错误结果仍然。
1>nafxcw.lib(afxglobals.obj) : error LNK2005: "public: virtual __thiscall CMemDC::……


看它的提示消息,是这个析构函数重复定义了啊,你是不是在你这个类里,重新声明了一个析构函数啊?
试过在 VC6 里编译么?是只在VC2010 编译不通过还是咋滴?

#2


引用 1 楼 tandyt 的回复:
引用楼主 lcy_888 的回复:
快过春节了,装个VS2010尝尝鲜,不想遇到以上问题,具体是新建一个类继承至CDC的CMemDC类,在XScrollBar.h中我包含了CMemDC类,结果出现如下错误,我尝试过在编译时先生成nafxcw.lib库,但错误结果仍然。
1>nafxcw.lib(afxglobals.obj) : error LNK2005: "public: virtual ……


或者,你试试,清除所有编译生成的文件(包括临时文件),然后重新生成方案试试?以前在VC6.0试过,这样重新编译后有可能避免这个错误。

#3


正常情况下,应该不会出这个问题啊,是不是你的新类里,没有设置只能包含一次?然后被多次包含而导致重复了?

#4


在VS2008中都编译通过了,只有在VS2010中通不过,但加/force可以通过,但这样程序性能不佳。

#5


有一次俺不知道怎么弄的,不是使用/FORCE:MULTIPLE,反正调整过头文件的顺序,弄好了,现象一样,但是不是2010。

#6


我也觉得是包含顺序所导致的问题,正在努力调整,望高手支招,谢了。

#7


问题解决了,原来VC2010已经包含了自己实现的CMemDC类,所以需要把自己编写的或者引用第三方库的CMemDC改名,否则错误难消。

#8


恩,有用,编译电驴有同样的问题

#9


学习....

#10


引用 7 楼 lcy_888 的回复:
问题解决了,原来VC2010已经包含了自己实现的CMemDC类,所以需要把自己编写的或者引用第三方库的CMemDC改名,否则错误难消。


CMemDC类在VC2010的MFC中已经包含:afxglobals.h(nafxcwd.lib)
所以这个名字将不用用于此自定义类了.将其改个名字即可继续使用.

#1


引用楼主 lcy_888 的回复:
快过春节了,装个VS2010尝尝鲜,不想遇到以上问题,具体是新建一个类继承至CDC的CMemDC类,在XScrollBar.h中我包含了CMemDC类,结果出现如下错误,我尝试过在编译时先生成nafxcw.lib库,但错误结果仍然。
1>nafxcw.lib(afxglobals.obj) : error LNK2005: "public: virtual __thiscall CMemDC::……


看它的提示消息,是这个析构函数重复定义了啊,你是不是在你这个类里,重新声明了一个析构函数啊?
试过在 VC6 里编译么?是只在VC2010 编译不通过还是咋滴?

#2


引用 1 楼 tandyt 的回复:
引用楼主 lcy_888 的回复:
快过春节了,装个VS2010尝尝鲜,不想遇到以上问题,具体是新建一个类继承至CDC的CMemDC类,在XScrollBar.h中我包含了CMemDC类,结果出现如下错误,我尝试过在编译时先生成nafxcw.lib库,但错误结果仍然。
1>nafxcw.lib(afxglobals.obj) : error LNK2005: "public: virtual ……


或者,你试试,清除所有编译生成的文件(包括临时文件),然后重新生成方案试试?以前在VC6.0试过,这样重新编译后有可能避免这个错误。

#3


正常情况下,应该不会出这个问题啊,是不是你的新类里,没有设置只能包含一次?然后被多次包含而导致重复了?

#4


在VS2008中都编译通过了,只有在VS2010中通不过,但加/force可以通过,但这样程序性能不佳。

#5


有一次俺不知道怎么弄的,不是使用/FORCE:MULTIPLE,反正调整过头文件的顺序,弄好了,现象一样,但是不是2010。

#6


我也觉得是包含顺序所导致的问题,正在努力调整,望高手支招,谢了。

#7


问题解决了,原来VC2010已经包含了自己实现的CMemDC类,所以需要把自己编写的或者引用第三方库的CMemDC改名,否则错误难消。

#8


恩,有用,编译电驴有同样的问题

#9


学习....

#10


引用 7 楼 lcy_888 的回复:
问题解决了,原来VC2010已经包含了自己实现的CMemDC类,所以需要把自己编写的或者引用第三方库的CMemDC改名,否则错误难消。


CMemDC类在VC2010的MFC中已经包含:afxglobals.h(nafxcwd.lib)
所以这个名字将不用用于此自定义类了.将其改个名字即可继续使用.