【问题标题】:Link errorLNK2005 in VC++VC++中的链接错误LNK2005
【发布时间】:2010-11-26 00:01:53
【问题描述】:

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

keylogger.obj : error LNK2005: "struct HBITMAP__ * hOldBmp" (?hOldBmp@@3PAUHBITMAP__@@A) 已在 Button.obj 中定义

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      “仅在 button.h 中定义”正是您的问题。除非您在此处将其声明为 extern 并将定义放入 C++ 源文件(而不是头文件),否则每个翻译单元都会获得自己的变量定义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多