2014-11-05 80 views
-3

我有兩個.cpp文件和一個.h文件中:LNK2005 - 已定義的對象

#include <iostream> 
#include <string> 
#include <vector> 

namespace characters 
{ 
    using namespace std; 
    class character{ 
    public: 
     void info_character(); 
    //... 
    }; 
} 

我這個頭文件添加到我的.cpp文件。所以,當我想用​​:

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    character test(); 
    test.info_character(); 
} 

它會導致錯誤:

Error 1 error LNK2005: "public: void __thiscall characters::character::info_character(void)" ([email protected]@[email protected]@QAEXXZ) already defined in Mechanics.obj

如何修復它(我想的頭文件添加到我的所有.cpp文件)?

+1

上面引用的標題是否完整(它似乎缺少,至少包括警衛)?錯誤消息看起來好像是在標頭中定義了「characters :: character :: info_character()」。 ...或者您意外地包含.cpp文件。另一種可能性是Mechanics.obj的依賴關係沒有正確跟蹤,它是早期版本的遺留問題(嘗試清理項目和重建)。 – 2014-11-05 15:34:53

+0

你確定你沒有包含標題兩次嗎?它似乎沒有包括警衛,並且真的應該。 – ssube 2014-11-05 15:35:05

+1

您不可能從您發佈的代碼中獲取此錯誤。這是一個鏈接器錯誤,並且由於[vexing parse](http://en.wikipedia.org/wiki/Most_vexing_parse),您的代碼無法編譯,因此無法達到鏈接階段。 – Angew 2014-11-05 15:40:39

回答

1

您應該確保包含文件不包含character::info_character的實現,除非您使用內聯實現(您的摘錄沒有)。

移動這個代碼

void character::info_character() 
{ 
    ... 
} 

到.cpp文件之一。

相關問題