類模板的分離編譯問題

2021-10-04 12:39:47 字數 1100 閱讀 1610

類模板的分離編譯,即模板類的定義和其模板成員函式(介面)的定義不在同一檔案中。如模板類的定義在.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...