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 樂雨 把第一個if a 0 改為 if a 0 倒數第二行getch 改為 getchar 我已經用microso visual c 執行過了,改過之後就正確了。此外我這還有一個求根的c語言程式,是把s 0時的情況,考慮進來。此時結果為復根,你也可以看看。程式如下 include include f... 生時何必久睡,死後自會長眠 大自然把人們困在黑暗之中,迫使人們永遠嚮往光明。歌 德 危難是生命的試金石。希羅科夫 只有在苦難中,才能認識自我。希爾蒂 患難困苦,是磨鍊人格之最高學校。梁啟超 不認識痛苦,就不是一條好漢。雨 果 困難是一個嚴厲的導師。貝 克 困難產生於克服困難的努力中。斯邁爾斯 憂患激... 1 不是不能定義,是定義了沒意義。因為建構函式不被繼承,而虛擬函式是要在派生類中重定義的2 定義虛解構函式後,由於多型,當使用基類指標指向派生類物件時,會呼叫派生類的虛構函式,然後派生類的解構函式自動呼叫基本解構函式。不是虛的話,直接呼叫基類的解構函式了。如果派生類中有用new分配的記憶體,就無法釋...最近在學習C語言的時候遇到了問題,我要求二元一次方程
在學習生活中,當你遇到困難時,用哪句名言
c 解構函式問題,c 解構函式的問題