類模板的分離編譯,即模板類的定義和其模板成員函式(介面)的定義不在同一檔案中。如模板類的定義在.h標頭檔案中,同時在.h標頭檔案中宣告介面,而在模板類之外的.cpp檔案中定義介面。此時在main函式中,如果只引用.h標頭檔案,編譯會報錯。
原因:大多數編譯器,不支援類模板的分離編譯!
(1)實現分離編譯
其實也可以實現分離編譯。解決辦法:在main函式中引用定義介面的.cpp檔案,這時編譯就可以通過了。
// seqlist.h
template
<
class
datatype
>
class
seqlist
;// seqlist.cpp中
#include
"seqlist.h"
template
<
class
datatype
>
seqlist
::函式(
)// main.cpp中
#include
"seqlist.cpp"
intmain()
(2)類模板的介面與實現放在一起
建議把類模板的介面與實現放在一起
。
// seqlist.h
template
<
class
datatype
>
class
seqlist
;template
<
class
datatype
>
seqlist
::函式(
)// main.cpp中
#include
"seqlist."
intmain()
推薦
:關於類模板分離編譯的問題解析,看這裡:
細談 c++ 類模板的分離式編譯:類模板究竟要不要介面與實現分離
類模板的分離編譯
一直覺得模板類是特別神奇的東西,它可以構造出不同型別的物件,使 更加的靈活。這個過程就是類模板的例項化。我們使用類的模板寫乙個stack類 include include seqlist1.h using namespace std templateclass container seqlist c...
模板的分離編譯問題
所謂的分離編譯是指將宣告和定義分開來寫,即將乙個函式的宣告和定義放在.h和.cpp檔案中。寫過模板的人應該都會發現當我們用上面的方式寫乙個函式的時候,只要在.cpp中包.h的標頭檔案,就沒什麼問題,但是如果寫模板的時候,就編譯鏈結不過去,就如下面這個例子 include template void ...
模板的分離編譯問題
所謂的分離編譯是指將宣告和定義分開來寫,即將乙個函式的宣告和定義放在.h和.cpp檔案中。寫過模板的人應該都會發現當我們用上面的方式寫乙個函式的時候,只要在.cpp中包.h的標頭檔案,就沒什麼問題,但是如果寫模板的時候,就編譯鏈結不過去,就如下面這個例子 includetemplate void f...