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