当我尝试构建我的应用程序时,链接器提供错误加载,如下所示:
modlauch.obj:错误LNK2005:“public: 虚拟__thiscall lolbutton ::〜lolbutton(无效)” (?? 1lolbutton @@ UAE @ XZ)已定义 在lolbutton.obj
我怀疑它与错误配置的编译器有关,但我不知道如何修复它。我的课程只包含一次,因此我认为它与代码无关。我尝试了重建和清理项目,但没有帮助。
有人可以建议解决这个问题吗?我的平台是 Win32(C ++),我正在使用 MFC 。
答案 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”块中,或者可能与使用预编译头文件有关。