链接器无法链接我的应用程序(XXXX已在XXXX.obj中定义)

时间:2010-02-17 12:21:03

标签: c++ mfc linker-errors

当我尝试构建我的应用程序时,链接器提供错误加载,如下所示:

  

modlauch.obj:错误LNK2005:“public:   虚拟__thiscall   lolbutton ::〜lolbutton(无效)”   (?? 1lolbutton @@ UAE @ XZ)已定义   在lolbutton.obj

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

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

4 个答案:

答案 0 :(得分:4)

当你像这样编写类时,你会得到链接器错误:

lolbutton.h:

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

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

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

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

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

答案 1 :(得分: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>

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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