2010-02-17 27 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