在VC ++中链接errorLNK2005

时间:2009-09-06 10:24:51

标签: visual-c++ linker-errors multiple-definition-error

我有一个程序我想要实现按钮类。我在button.h中声明了我的所有变量并定义了button.cpp中的所有方法,我在WINMAIN中调用这些函数,出现以下错误。

keylogger.obj:错误LNK2005:“struct HBITMAP__ * hOldBmp”(?hOldBmp @@ 3PAUHBITMAP __ @@ A)已在Button.obj中定义

错误是针对多个定义hOldBmp,但它仅在button.h中定义

2 个答案:

答案 0 :(得分:0)

“仅在button.h中定义”才是您的问题。除非你在那里声明它是extern并将定义放入C ++源文件(不是头文件),否则每个翻译单元都会得到他们自己的变量定义。

答案 1 :(得分:0)

似乎是一个常见的错误:你从两个.obj文件中包含了这个h​​OldBmp指针的实现,因此来自两个cpp文件。因此两个obj文件都包含实现此指针的代码。链接器无法决定在最终二进制文件中使用哪种实现。

解决方案:只在头文件中留下声明。您可以将其声明为extern或将其设为按钮类的static成员变量。将定义放在cpp文件中。