錯誤**:
檔案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...