類模板不能讓宣告和實現分離

2021-06-29 14:37:18 字數 943 閱讀 6801

寫模板類的時候出的問題,調了一晚上,就是鏈結出錯,於是搜尋引擎開始工作,搜到篇簡單的博文解釋,暫時做個標記吧

我們習慣是.h中放類的函式宣告,在.cpp中放類的函式定義,但在類模板中不能這樣做,如隨手寫了個demo測試了下

.h中**

[cpp]view plain

copy

#pragma once

template

<

class

t>  

class

ctemplate  

;  

.cpp中**

[cpp]view plain

copy

#include "stdafx.h"

#include "template.h"

template

<

class

t>  

ctemplate::ctemplate(void

)    

template

<

class

t>  

ctemplate::~ctemplate(void

)    

template

<

class

t>  

void

ctemplate::fun(t a)    

不呼叫時執行不會報錯,一旦給模板賦予物件:ctemplatetest ;

原因:因為類模板和函式模板都不是真正的定義,真正的定義是在模板實體化的時候由編譯器完成的

。如果將模板的定義部分和實現部分分離開來,編譯器真正要去完成模板實體化的時候就會因為找不到相應的**而發生鏈結錯誤,所以這是編譯器的問題,因為c++標準是要求能實現分離編譯的。

所以,類模板還是老老實實在乙個.h中宣告並定義吧.

C 類模板的宣告和實現不能分離

也許你具有良好的程式設計習慣,在定義乙個類的時候總會把宣告和實現分離開,位於不同的檔案中。比如你定義乙個類a,首先建立乙個.h檔案,如下 class a 接下來你建立乙個.cpp檔案實現類的宣告,如下 include classa.h include a a int b void a show a ...

C 類模板的宣告與實現分離

第一次寫博文,本人才疏學淺,以現在的實力寫下這些東西,內容上可能會出現錯誤和不嚴謹之處,但是為了以後自己的回顧和總結,覺得自己應該在錯誤中前進,呵呵。如若讀者不幸搜尋到本人文章,請你們以懷疑的態度去閱讀。最近在實現鏈式佇列資料結構時,發現類模板的宣告與實現分離開 採用傳統的.h檔案和對應的.cpp檔...

C 中模板類的宣告和實現分離問題

有兩種方法 第1種 使用 tpp 檔案實現類模板的介面與實現的檔案分離 在.h檔案中放介面,在.tpp檔案中放實現,但這種方法得在.h檔案中,類的定義下面通過 include包含 tpp 檔案,如下 檔案 放類模板的介面 pragma once templateclass templateclass...