[問題] bitset的template function(新問題 改錯)

看板C_and_CPP作者 (亞拉那以嘎?)時間15年前 (2009/05/30 19:58), 編輯推噓7(7011)
留言18則, 6人參與, 最新討論串1/1
程式碼大致如下: 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

05/30 20:17, , 1F
喔,因為 bitset<6> 跟 bitset<10> 是不同的型別
05/30 20:17, 1F

05/30 20:18, , 2F
不同的模板參數會具現出不同的型別. calc 用一個 T 無法同
05/30 20:18, 2F

05/30 20:18, , 3F
時代表 bitset<6> 跟 bitset<10>
05/30 20:18, 3F

05/30 20:44, , 4F
這個東西可以參考一下Loki的IntToType
05/30 20:44, 4F
謝謝各位 原來會當作是不同的型別 這部分暫時應該是解決了 剩下一個問題 如果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)

05/30 22:24, , 5F
calc(T a, U p)改成calc(T a, S p)
05/30 22:24, 5F

05/30 22:24, , 6F
我在gcc4.4可以正常compile你寫的code
05/30 22:24, 6F
對不起 那是我手誤打錯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)

05/30 22:43, , 7F
可以compile, 完全沒問題
05/30 22:43, 7F

05/30 22:47, , 8F
那這跟gcc版本過舊有關係嗎orz? 我用的是devc4992的..
05/30 22:47, 8F

05/31 00:10, , 9F
樓上你的環境是什麼q_q? 我抓了最新的MINGW也還是不給過
05/31 00:10, 9F

05/31 00:32, , 10F
Ubuntu 9.04 + gcc 4.4.0
05/31 00:32, 10F

05/31 00:33, , 11F
沒有特別的參數 就g++ xxx.cpp -o xxx這樣
05/31 00:33, 11F

02/04 00:42, , 12F
那就不要用to_string() 用 operator<<
02/04 00:42, 12F

02/04 00:44, , 13F
template<typename T, typename U>
02/04 00:44, 13F

02/04 00:44, , 14F
string calc(T a, U p){
02/04 00:44, 14F

02/04 00:45, , 15F
stringstream strm;
02/04 00:45, 15F

02/04 00:45, , 16F
strm << a;
02/04 00:45, 16F

02/04 00:45, , 17F
return strm.str();
02/04 00:45, 17F

02/04 00:45, , 18F
}
02/04 00:45, 18F
文章代碼(AID): #1A8HzIIs (C_and_CPP)