2011-03-13 55 views
1

有人可以告訴我以下錯誤意味着什麼?錯誤是什麼意思LNK2019

錯誤2錯誤LNK2019:無法解析 外部符號? 「公共:類 TLST & __thiscall TLST ::運算=(類 TLST常量&)」 (?? 4 $ TLST @ VTInt @@@ @ QAEAAV0 @ ABV0 @@ Z) 函數引用 「市民:無效 __thiscall TPair> :: GETVAL(類色調 &,類TLST &)常量」??? (GETVAL @ $ @ TPair @@ VTInt V $ TLst @ VTInt @@@@@@ QBEXAAVTInt @@ AAV?$ TLst @ VTInt @@@@@ Z)randomgraph.obj randomgraph

+0

什麼語言? C++?這是一個鏈接器錯誤。 – 2011-03-13 21:58:10

回答

0

Unresolved external symbol表示鏈接器找不到引用。這通常是由於忘記將對象文件或庫添加到鏈接步驟所致。 (包括一個類的頭文件是不夠的 - 你還必須添加實現代碼。)

3

通常,這意味着鏈接器會看到對符號的引用,但它無法在任何地方找到它 - 通常是由於缺少庫或對象文件。

這種情況下這是因爲您在.cpp文件中實現您的模板class'es成員函數 - 他們應該在標題中實現。

模板類是模板不是類。當編譯器看到你使用例如vector<int> f;它從模板vector創建一個新類vector<int>。爲了創建例如vector<int>::size()它需要在實例化模板的地方看到size()的實現 - 如果size()的實現不在頭文件中,則不能這樣做。

你可以通過明確實例化vector來獲得int - 然後編譯器會在編譯cpp文件時看到顯式的實例化。這違背了創建模板的目的 - 它只能用於您通過顯式實例化預定義的類型。所以,小故事,總是在頭文件中完全實現模板。

+0

在頭文件中定義的模板類是TVec >>和模板 class TVec {public:typedef TVal * TIter;並且在.cpp文件中,鏈接器錯誤即將發生:\t(TNdClss :: TIter CI = ndClss.BegI(); CI 」,CI-> Val1);其中typedef TVec >> TNdClss;在標題中定義。 – 2011-03-14 02:09:41

+1

'TLst&TLst :: operator ='在哪裏實現? – Erik 2011-03-14 09:04:18

0

此問題已解決。在模板類TLst中,函數

TLst TLst :: operator =(const TLst &);

被宣佈,但沒有定義。我不得不在我的.cpp文件中定義函數。我也可以在我的頭文件中定義它。

感謝您的回覆。

Somnath