我有一个程序我想要实现按钮类。我在button.h中声明了我的所有变量并定义了button.cpp中的所有方法,我在WINMAIN中调用这些函数,出现以下错误。
keylogger.obj:错误LNK2005:“struct HBITMAP__ * hOldBmp”(?hOldBmp @@ 3PAUHBITMAP __ @@ A)已在Button.obj中定义
错误是针对多个定义hOldBmp,但它仅在button.h中定义
答案 0 :(得分:0)
“仅在button.h中定义”才是您的问题。除非你在那里声明它是extern并将定义放入C ++源文件(不是头文件),否则每个翻译单元都会得到他们自己的变量定义。
答案 1 :(得分:0)
似乎是一个常见的错误:你从两个.obj文件中包含了这个hOldBmp指针的实现,因此来自两个cpp文件。因此两个obj文件都包含实现此指针的代码。链接器无法决定在最终二进制文件中使用哪种实现。
解决方案:只在头文件中留下声明。您可以将其声明为extern
或将其设为按钮类的static
成员变量。将定义放在cpp文件中。