2010-02-17 62 views
1

当我尝试建立我的应用程序的连接提供了负载错误像这样的:链接无法链接到我的应用程序(XXXX已经XXXX.obj定义)

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

我怀疑它是与编译器配置错误但我d不知道如何解决它。我的课程只包含一次,所以我不认为它与代码有关。我试过重建和清理该项目但它没有帮助

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

+0

heh lolbutton .. – 2010-02-17 12:23:44

+0

请贴上代码。 – 2010-02-17 12:28:24

+0

它是由类向导创建的空类O.o – 2010-02-17 12:29:22

回答

3

当你写的类这样你会得到链接错误:

lolbutton.h:

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

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

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

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

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

1

在猜测 - 没有看到代码 - 你有没有把任何机会把lolbutton的析构函数放在标头中,而不会声明它inline?从你的描述中可以看出,如果你最终在多个翻译单元中使用析构函数的话,这可能是罪魁祸首。

+0

这不应该导致错误? – Elemental 2010-02-17 12:50:28

+0

在编译过程中不会导致错误,但会在链接过程中发生。 – 2010-02-17 13:09:22

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> 
+0

这会导致编译时错误(符号已定义),但似乎问题是报告链接器错误 – Elemental 2010-02-17 12:51:31

0

我会去要么多包括lolbutton.h的,因此我对包装内容在“如果定义someUUID!”注释块或许也可能是配合使用的预编译做头。

+0

我也认为这个问题与编译头文件有关。 – Andy 2010-02-17 13:38:34