作者applerev (亞拉那以嘎?)
看板C_and_CPP
標題[問題] bitset的template function
時間Sat May 30 19:58:05 2009
程式碼大致如下:
template<typename T>
string calc(T a, T p){
string ans = "";
return ans;
}
int main(){
bitset<10> a("0011000100");
bitset<6> b("110101");
string str = calc(a, b);
}
但是執行後卻告訴我
no matching function for call to 'calc(std::bitset<10u>&, std::bitset<6u>&)'
最近才開始碰template
所以完全不清楚為什麼會告訴我no matching...
不知道是不是犯了什麼錯
麻煩各位前輩指點一下 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.44.128.172
1F:推 yoco315:喔,因為 bitset<6> 跟 bitset<10> 是不同的型別 05/30 20:17
2F:推 firose:不同的模板參數會具現出不同的型別. calc 用一個 T 無法同 05/30 20:18
3F:→ firose:時代表 bitset<6> 跟 bitset<10> 05/30 20:18
4F:推 Killercat:這個東西可以參考一下Loki的IntToType 05/30 20:44
謝謝各位 原來會當作是不同的型別
這部分暫時應該是解決了
剩下一個問題
如果calc變成下面這個樣子
template<typename T, typename U>
string calc(T a, U p){
string ans = a.to_string();
return ans;
}
變成標紅色那行出問題
錯誤訊息也是差不多
no matching function for call to 'std::bitset<10u>::to_string()'
參考這篇MSDN(
http://msdn.microsoft.com/en-us/library/1s2be1zd(VS.80).aspx)
改成如下的結果
string ans =
a.to_string<char, char_traits<char>, allocator<char> >();
還是一樣的錯誤(雖然MSDN上的這個我也看不太懂= =)
那再請問這個的問題點在哪呢
※ 編輯: applerev 來自: 114.44.128.172 (05/30 21:06)
5F:推 zerodevil:calc(T a, U p)改成calc(T a, S p) 05/30 22:24
6F:→ zerodevil:我在gcc4.4可以正常compile你寫的code 05/30 22:24
對不起 那是我手誤打錯orz
我是用codeblock + gcc 它不給我過
我附上他不給我過的程式碼好了 比較不會手誤
http://akatuki1987.hp.infoseek.co.jp/test.cpp
謝謝
※ 編輯: applerev 來自: 114.44.128.172 (05/30 22:36
※ 編輯: applerev 來自: 114.44.128.172 (05/30 22:38)
7F:推 zerodevil:可以compile, 完全沒問題 05/30 22:43
8F:→ applerev:那這跟gcc版本過舊有關係嗎orz? 我用的是devc4992的.. 05/30 22:47
9F:→ applerev:樓上你的環境是什麼q_q? 我抓了最新的MINGW也還是不給過 05/31 00:10
10F:推 zerodevil:Ubuntu 9.04 + gcc 4.4.0 05/31 00:32
11F:→ zerodevil:沒有特別的參數 就g++ xxx.cpp -o xxx這樣 05/31 00:33
12F:推 xxxx9659:那就不要用to_string() 用 operator<< 02/04 00:42
13F:→ xxxx9659:template<typename T, typename U> 02/04 00:44
14F:→ xxxx9659:string calc(T a, U p){ 02/04 00:44
15F:→ xxxx9659: stringstream strm; 02/04 00:45
16F:→ xxxx9659: strm << a; 02/04 00:45
17F:→ xxxx9659: return strm.str(); 02/04 00:45
18F:→ xxxx9659:} 02/04 00:45