c 使用類需要引數列表,用了兩個類模版

時間 2021-05-07 20:01:39

1樓:匿名使用者

node也是模板類,所以都需要寫成node*,修改如下:

template

struct node

;template

class tree

;template

void tree::nlr(node*temp) //報錯???

}這樣寫貌似還缺少建構函式,不知你下面是不是寫了

c++使用類别範本的引數列表

2樓:南非烏雀

類别範本定義:

定義一個類别範本,一般有兩方面的內容:

a。首先要定義一個類,其格式為:

template

class test

test為類名,在類定義體中,如果採用通用資料型別的成員,函式引數的前面需加上t,其中通用型別t可以作為普通成員變數的型別。還可以作為成員函式的引數和返回型別等。

關於類别範本的使用:類别範本的使用實際上是將類别範本例項化成一個具體的類,它的格式為:類名《實際的型別》

模板類是類别範本例項化後的一個產物,說個具體點的例子吧,我們把類别範本比作是一個做餅乾的模子,而模板類就是用這個模子做出來的餅乾,至於這個餅乾是什麼味道的就要看你自己在例項化時用的是什麼材料了,你可以做巧克力餅乾,也可以做牛奶餅乾,這些餅乾出了材料不一樣外,其它的東西都是一樣的了。

error c2955: 使用類 模板 需要 模板 引數列表c++模板問題。。求高手指點

3樓:幻夢·人生

你的max函式不是靜態函式,不能這麼呼叫。建議你將max宣告一個友元函式。

template

class point

;template

4樓:匿名使用者

類别範本中類的成員函式的宣告和定義要在同一個檔案中

將他們放到同一個標頭檔案中試試

c++使用類别範本定做

5樓:

主要有3個錯誤:

1).使用string 的操作符,沒有載入標頭檔案,即:include

2).list中的add函式原型宣告是:void add(cat&c);引數是cat物件的引用。而在main方法中,卻是用的string型別的實際引數,造成引數的不匹配。

3).list中的add函式原型宣告是:void add(t&c);引數是對t型別的引用。而main函式中,用常量作為實參是不對的。如果都用變數是可以用引用的。

程式修改如下:

#include

#include

using namespace std;

template

struct node

t c;

node*next,*pref;

};template

class list

;template

list::list():first(0),last(0){}

template

void list::add(t n)

template

void list::remove(t&n)

template

node* list::find(t&n)

template

list::~list()

template

void list::print()

class cat

標頭檔案使用要:include

friend ostream& operator<<(ostream&o,const cat&c);

list::list():first(0),last(0){}

void list::add(cat&n)

void list::remove(cat&n)

node* list::find(cat&n)

list::~list()

void list::print()

int main()

為什麼c++程式會出現缺少類别範本的引數列表?

6樓:德克and德華

#include

using namespace std;

template class pair1

t getmax();

};template

t pair1::getmax()

int main(void)

求c++高手解答。錯誤是list使用類别範本需要引數列表;list::iterator沒有合適建構函式可用。

7樓:匿名使用者

你定來義list是個模板類,t必須用具體源的型別來

例項化,比如t例項化成int

listlist =

list::iterator begin = list.begin()

當然你也可以自定義

一個型別來例項化

class mytype

listlist =

list::iterator begin = list.begin();

c++,為何模板類才能使用預設模板引數,而模板函式卻不能?求教。

8樓:匿名使用者

這是因為函式是根據呼叫時的引數型別反推模板引數型別。而模板類别範本引數型別是你申明物件時給出的。好拗口啊!還是拿你的例子來舉例來說明好了:

我們定義一個模板函式:

template func(t1 p1, t2 p2);

然後在某一個地方呼叫:

int x; short y;

func(x, y);//編譯器編譯這裡的**時會根據實際引數x, y的型別得出t1是int,t2是short。如果你在函式板中指定typename t2 = int也沒啥用,而且甚至和推匯出的short矛盾。

而模板類就不一樣:

template class cname;//類似函式的建構函式...};

cnameobj(x, y);//這裡t2已由給出了,它規定t1必須是int型別,t2必須是short型別,而不是由x, y來反推t1, t2。如果x, y型別不能隱式轉換成(int)x, (short)y則與申明不符會出編譯錯誤。

9樓:匿名使用者

你給fun函式傳個int,那個int多餘的啊,因為沒有typename匹配它

c++模板類和類别範本

10樓:匿名使用者

用相同的類别範本可以組建任何型別的物件集合。在傳統c++中,可能有一個浮點數類或者一個整數類,如果使用類别範本,可以定義一個對兩者都適用的類number。

類别範本說明

類别範本說明的一般形式是:

template 《型別形參表》

class 《類名》

;template 《型別形參表》

《返回型別》 《類名》 《型別名錶》::《成員函式1>(形參表)

template 《型別形參表》

《返回型別》 《類名》 《型別名錶》::《成員函式2>(形參表)

…12.3.2 使用類别範本

與函式模板一樣,類别範本不能直接使用,必須先例項化為相應的模板類,定義該模板類的物件後才能使用。

建立類别範本後,可用下列方式建立類别範本的例項:

《類名》 《型別實參表》 《物件表》;

其中,《型別實參表》應與該類别範本中的《型別形參表》匹配。《型別實參表》是模板類(template class),《物件》是定義該模板類的一個物件。

使用類别範本可以說明和定義任何型別的類。這種類被稱為引數化的類。如果說類是物件的推廣,那麼類别範本可以說是類的推廣。

注意:類别範本與模板類的區別 。

一個簡單的類别範本程式(求兩個任意型別數的和)。

template

class a

;template

a::a()

template

a::a(t _a,t _b)

template

t a::sum()

void main()

程式已經在vc6.0下除錯通過,以上**在一個檔案中,別把類的宣告放在一個.h中把實現放在.cpp中,類别範本不支援分離只能是類的宣告和定義放在同一個檔案中。

c語言中要使用,c語言中,要使用 func 需要包含哪些標頭檔案或巨集定義?

最好不要用下劃線開始的變數名或函式名,因為系統的標頭檔案中,許多是以下劃線開始的。當然,函式 或變數 名 func 這並不是系統已用的名稱,直接定義 使用即可,不需要另外增加標頭檔案的支援。 風若遠去何人留 func 是預置在編譯器中的巨集,並不包含於任何標頭檔案,所以直接呼叫即可,不需要做任何其它...

c如何使用 socket 類向 http 伺服器傳送數

socket程式設計首先要包含所需的標頭檔案winsock2.h並工程中新增庫檔案ws2 32.lib.接著載入套接字型檔所用函式是 第一個引數代表的是所要載入的套接字型檔的版本,第二個引數用於儲存返回的版本資訊 wversionrequested makeword 1,1 用makeword來設定...

A類 B類 C類酒店是怎麼分的,A類 B類 C類建築是如何劃分的

依酒店的檔次和星級劃分為a b c不同的級別 a類 b類 c類建築是如何劃分的 建築工程 類別劃分標準 專案 一類 二類 三類 四類 工業建築 單層廠房 跨度 m 24 18 12 12 簷高 m 20 15 9 9 多層廠房 面積 8000 5000 3000 3000 簷高 m 36 24 12...