使用包含編譯模型編譯模板類時出現無法理解的錯誤

2021-05-27 07:52:23 字數 2232 閱讀 1949

錯誤**:

檔案1:linkedlist.h

templateclass linkedlist

;#include "linkedlist.cpp"

檔案2:linkedlist.cpp

template linkedlist::~linkedlist()

templatelinkedlist::linkedlist()

templatevoid linkedlist::clearall()

根據c++primer第四版關於包含編譯模型的描述(543頁),將函式模板的定義與宣告分在兩個檔案中,但該測試編譯時出現了難以理解的錯誤:

錯誤 1 error c2143: 語法錯誤 : 缺少「;」(在「<」的前面)e:\文件\documents\visual studio 2008\projects\test\test\linkedlist.cpp5test

錯誤 2error c4430: 缺少型別說明符 - 假定為 int。注意: c++ 不支援預設 inte:\文件\documents\visual studio 2008\projects\test\test\linkedlist.cpp5test

錯誤 3error c2988: 不可識別的模板宣告/定義e:\文件\documents\visual studio 2008\projects\test\test\linkedlist.cpp5test

錯誤 4error c2059: 語法錯誤 : 「<」e:\文件\documents\visual studio 2008\projects\test\test\linkedlist.cpp5test

錯誤 5error c2588: 「::~linkedlist」: 非法的全域性 析構函式e:\文件\documents\visual studio 2008\projects\test\test\linkedlist.cpp5test

錯誤 6fatal error c1903: 無法從以前的錯誤中恢復;正在停止編譯e:\文件\documents\visual studio 2008\projects\test\test\linkedlist.cpp5test

改正之後的**:

#ifndef linkedlistitem_h

#define linkedlistitem_h

namespace linkedlist

linkedlistitem*getnext()

};}#include "linkedlistitem.cpp"

#endif

#ifndef linkedlistitem_cpp

#define linkedlistitem_cpp

#include #include "linkedlistitem.h"

namespace linkedlist

templatelinkedlistitem::linkedlistitem(const t& itemin,linkedlistitem*p=0,linkedlistitem*n=0):item(itemin),preview(p),next(n)

templatebool linkedlistitem::operator <(const linkedlist::linkedlistitem& i) const

templatebool linkedlistitem::operator >(const linkedlistitem&i)const

templatebool linkedlistitem::operator >=(const linkedlistitem&i)const

templatebool linkedlistitem::operator ==(const linkedlistitem&i)const

templatebool linkedlistitem::operator !=(const linkedlistitem&i)const

templatevoid linkedlistitem::changeitem(const t& i)

templatevoid linkedlistitem::changethis(linkedlistitem* i)

else

}//template//void linkedlistitem::changethis(linkedlistitem&i)

//}#endif

C 模板編譯模型

編譯器只有在用到模板時,如呼叫了函式模板或呼叫了類模板的物件的時候,編譯器才產生特定型別的模板例項。編譯時,模板與普通函式 類的區別 標準 c 編譯模板 的兩種模型 包含編譯 分別編譯 相同點 構造程式的方式相同 類定義和函式宣告放在標頭檔案中,而函式定義和成員定義放在原始檔中。不同點 編譯器怎樣使...

分離編譯時模板模板報錯

前提test.cpp include test.h template a a test.h template class a main.cpp include test.h int main 報錯原因是 沒有 a a 函式鏈結錯誤。這個原因的本質是c c 是分離編譯的,何為分離編譯,c 程式是這樣生...

類模板的分離編譯

一直覺得模板類是特別神奇的東西,它可以構造出不同型別的物件,使 更加的靈活。這個過程就是類模板的例項化。我們使用類的模板寫乙個stack類 include include seqlist1.h using namespace std templateclass container seqlist c...