在學習C 類屬函式時遇到的問題

時間 2021-09-12 00:10:22

1樓:n維向量

理論上不應該報這個錯,因為在候選呼叫存在二義性的情況下,會從可行函式集中優先去掉函式模板例項。在此例中,這樣操作的結果便剩下一個唯一的普通函式適用,不存在二義性。

實際上,用gcc編譯時,報的是另外一個錯誤:error: invalid initialization of reference of type 'int&' from expression of type 'char'

將swap(i,b);改為swap(i, (int&)b);則正常呼叫普通過載函式。

2樓:sweet丶奈何

swap(i,b)這個語句的問題。

swap(int, char)這樣的呼叫有二義性,既可以是特殊版本,也可以模板那個版本,編譯器不知道如何選擇,所以只有報錯。

i,b是不通的型別,系統找不到該函式,所以要報錯,其實也可以在上面過載這型別。

void swap(int& x,char& y)

3樓:

i,b是不通的型別,系統找不到該函式,所以要報錯,其實你也可以在上面過載這型別

void swap(int& x,char& y)

4樓:匿名使用者

模板例項化時不支援隱式型別轉換,你在自己的註釋中不也說了嗎!

那個普通函式可視為模板的一個特例化,不存在二義性的說法。

關於c++類中帶函式模板的問題。。

5樓:匿名使用者

#include

using namespace std;

class student

};class manage }}

}};int main()

大概按照上面的來寫就可以了

6樓:匿名使用者

大致明白你的意思了。你是想用c++的stl標準的algorithm演算法來排序對吧?

如果是這樣,你得自己寫一個iterator類的東西來處理你的資料的。原因請參見stl演算法的使用方式。

c++類别範本和函式模板的問題

7樓:匿名使用者

template

class mytmpclass

;template

mytmpclass::mytmpclass()template

void mytmpclass::set_information()template

void mytmpclass::display()int main()

{mytmpclassa;

a.set_information();

a.display();

cout<

你這樣試試。

8樓:★邂逅緣

template

type1 retun(identity&a);

還不支援du返回型別推

zhi導。

template

void identity::display()所有類dao外函式專實現identity後面需屬要跟上函式列表

c++類别範本的成員函式在外部實現時,為什麼每個 函式前面都要加template ???

9樓:destroy流亡

那是給類做模板宣告

如:template

class a

;template

void a::b(){}

如果沒有template的話,就無法說明專a這個類是模板類了屬

c++關於類别範本(vector)的問題。

10樓:匿名使用者

你的**沒什麼大問題,只是有兩個地方需要修改一下,如下(見註釋):

#include

#include

#include

using namespace std;//只需要使用此句就可以了//using std::cin;

//using std::cout;

//using std::endl;

//using std::string;

//using std::vector;

int main()

}for(vector::size_type index=0;index!=text.size();index++)

cout<

cout<

return 0;}

11樓:手機使用者

main函式的應用程式的入口函式,不能定義成模板函式。

模板函式模板類都是在呼叫(或者例項化)的時候,被指定了引數型別之後才生成真正的**的。可以查相關的書籍《thinking in c++》《stl 原始碼剖析》等。

你改了main函式的原型,當然會出現連結錯誤。

vector本身是模板類,你可以指定任意的型別裝進去。

作為模板類,vector能夠儲存「任意型別」的資料,是指相對於vector這個類來說,他不關心儲存的是什麼型別的。但是當你例項化一個vector的時候,你就需要確定一個引數型別,這樣你才能擁有一個可以用來例項化一個具體物件的類型別,比如vector,vector,vecor等。

任意型別是相對於模板類的,不是相對於應用程式。對於一個應用程式,他的邏輯是確定的,他能處理的資料型別也是確定的。即使是某些可以產生隨意性結果的程式,他的邏輯在一定程度上也是確定的。

我不知道我說沒說清楚,如果還有問題,請提出。

12樓:匿名使用者

warningc4786: 'std::reverse_iterator,std::

allocator>*,std::basic_string,std::allocator>,std::

basic_string,std::allocator> &,std::basic_string,std::

allocator> *,int>' : identifier was truncated to '255' chara

cters in the debug information

在除錯資訊裡,識別符號'std::reverse_ite........................cator> *,int>'被截斷到255個字元

_________

我這不用using namespace std;沒事啊, 除了vc6,

你多加個using std::vector; 試試

不過text是vector的啊, 你用vector::size_type幹嘛?

用vector::size_type; 和using std::vector;

或者你換個高版本的或其他的編譯器試試

13樓:匿名使用者

可以去掉using namespace std,因為程式中你用到的std名字空間的型別都用了using指示宣告,這是可以做到的。至於你說編寫標頭檔案時,用std::使用std名字空間中的型別,這是為了防止std在標頭檔案中濫用而造成「名字汙染」,這剛好和引進名字空間的目的相反,事與願違了!

14樓:

#include

#include

#include

int main(int argc, char* ar**)比你寫的簡單多了。

15樓:匿名使用者

vector::size_type

改為vector::size_type

最近在學習C語言的時候遇到了問題,我要求二元一次方程

樂雨 把第一個if a 0 改為 if a 0 倒數第二行getch 改為 getchar 我已經用microso visual c 執行過了,改過之後就正確了。此外我這還有一個求根的c語言程式,是把s 0時的情況,考慮進來。此時結果為復根,你也可以看看。程式如下 include include f...

在學習生活中,當你遇到困難時,用哪句名言

生時何必久睡,死後自會長眠 大自然把人們困在黑暗之中,迫使人們永遠嚮往光明。歌 德 危難是生命的試金石。希羅科夫 只有在苦難中,才能認識自我。希爾蒂 患難困苦,是磨鍊人格之最高學校。梁啟超 不認識痛苦,就不是一條好漢。雨 果 困難是一個嚴厲的導師。貝 克 困難產生於克服困難的努力中。斯邁爾斯 憂患激...

c 解構函式問題,c 解構函式的問題

1 不是不能定義,是定義了沒意義。因為建構函式不被繼承,而虛擬函式是要在派生類中重定義的2 定義虛解構函式後,由於多型,當使用基類指標指向派生類物件時,會呼叫派生類的虛構函式,然後派生類的解構函式自動呼叫基本解構函式。不是虛的話,直接呼叫基類的解構函式了。如果派生類中有用new分配的記憶體,就無法釋...