链接无法链接到我的应用程序(XXXX已经XXXX.obj定义)
当我尝试建立我的应用程序的连接提供了负载错误像这样的:链接无法链接到我的应用程序(XXXX已经XXXX.obj定义)
modlauch.obj:错误LNK2005: “市民: 虚拟__thiscall lolbutton ::〜lolbutton(无效)” (?? 1lolbutton @@ UAE @ XZ)已经在lolbutton.obj定义
我怀疑它是与编译器配置错误但我d不知道如何解决它。我的课程只包含一次,所以我不认为它与代码有关。我试过重建和清理该项目但它没有帮助。
有人可以建议解决这个问题吗?我的平台是Win32(C++)和我正在使用MFC。
当你写的类这样你会得到链接错误:
lolbutton.h:
class lolbutton {
public:
virtual ~lolbutton();
};
lolbutton::~lolbutton() {
// something...
}
,当你把它写这样你不会得到它:
class lolbutton {
public:
virtual ~lolbutton()
{
// inlined something...
}
};
通过将析构函数定义从.h文件移动到.cpp文件来修复链接器错误。这确保了析构函数只有一个定义。
在猜测 - 没有看到代码 - 你有没有把任何机会把lolbutton的析构函数放在标头中,而不会声明它inline
?从你的描述中可以看出,如果你最终在多个翻译单元中使用析构函数的话,这可能是罪魁祸首。
这不应该导致错误? – Elemental 2010-02-17 12:50:28
在编译过程中不会导致错误,但会在链接过程中发生。 – 2010-02-17 13:09:22
你有没有可能多次包含你的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>
这会导致编译时错误(符号已定义),但似乎问题是报告链接器错误 – Elemental 2010-02-17 12:51:31
我会去要么多包括lolbutton.h的,因此我对包装内容在“如果定义someUUID!”注释块或许也可能是配合使用的预编译做头。
我也认为这个问题与编译头文件有关。 – Andy 2010-02-17 13:38:34
heh lolbutton .. – 2010-02-17 12:23:44
请贴上代码。 – 2010-02-17 12:28:24
它是由类向导创建的空类O.o – 2010-02-17 12:29:22