2

当我尝试构建我的应用程序时,链接器会出现大量错误,例如:

modlauch.obj : 错误 LNK2005: "public: virtual __thiscall lolbutton::~lolbutton(void)" (??1lolbutton@@UAE@XZ) 已经在 lolbutton.obj 中定义

我怀疑它与错误配置的编译器有关,但我不知道如何修复它。我的课程只包含一次,所以我认为它与代码没有任何关系。我曾尝试重建和清理项目,但没有帮助

有人可以建议解决这个问题吗?我的平台是Win32(C++)并且我正在使用MFC

4

4 回答 4

4

当您像这样编写类时,您将收到链接器错误:

大声笑按钮.h:

class lolbutton {
public:
  virtual ~lolbutton();
};

lolbutton::~lolbutton() {
  // something...
}

当你这样写时你不会得到它:

class lolbutton {
public:
  virtual ~lolbutton()
  { 
     // inlined something...
  }
};

通过将析构函数定义从 .h 文件移动到 .cpp 文件来修复链接器错误。这确保了析构函数只有一个定义。

于 2010-02-17T14:27:09.623 回答
2

您是否有机会多次包含您的 lolbutton.h 文件?像这样:

//file: something.h
#include <lolbutton.h>
//... do code

//file: something_other.h
#include <lolbutton.h>

//file: main.cpp
#include <something.h>
#include <something_other.h>
于 2010-02-17T12:31:39.617 回答
1

猜测 - 没有看到代码 - 你有没有机会将 lolbutton 的析构函数放在标题中而不声明它inline?根据您的描述,如果您最终在多个翻译单元中使用析构函数的实例,这可能是罪魁祸首。

于 2010-02-17T12:29:37.630 回答
0

我会使用 lolbutton.h 的多个包含,因此我对将内容包装在“if !defined someUUID”块中的评论或者可能与使用预编译头有关。

于 2010-02-17T13:09:03.027 回答