看板 C_and_CPP 關於我們 聯絡資訊
: → shunren:http://ideone.com/gvaq0 07/07 22:12 仔細看錯誤訊息中 std::transform() 最後一個引數的位置: <unresolved overloaded function type> 這表示你給的引數 tolower 有多個被重載的版本導致編譯器無法決 定該將哪個版本傳進去, 在 C 語言中有一個全域的版本: #include <ctype.h> int tolower(int c); C++ 也有函式模板: namespace std { template <class charT> charT tolower(charT c, const locale& loc); } 雖然說 C++ 的版本並不模塑 std::transform() 最後一個參數要求 的 Concept; 但在產生 std::transform() 實體之前還是要有一個可 被決定的函式被代入才行, 如果你要使用 C 語言的版本: http://ideone.com/zFjME 再來就是用 C++ 的版本: http://ideone.com/0q4Cs C++ 的版本雖然明確指定模板引數, 但最後產生 std::transform() 實體時因為函式呼叫不合規定所以變成編譯錯誤, 正確的解法: http://ideone.com/DDKBZ 最後的解法換成其他字串型態如 std::wstring 也是可以的, 是最通 用的方法, C 語言因為沒有 overloading 的機制, 在切換實作上顯得 笨拙些 C++ 的函式也一起被視為 candidates 的原因是你用 using namespace 把原本那些在 std 底下的名稱給拉進來了, 這時候就不得不用 :: (scope resolution operator) 來鑑別彼此. 不要為了方便而 using namespace, 尤其是你對語言還不熟悉的情況 , 我最多只會寫到 function scope 層級的 using 而已. -- ╔═══╗╔═══╗ ╔═╗═╗╔═══╗╔═══╗╔╦═╦╗ 金栽經║ ╔╗ ║║ ╔╗ ║╔╗║ ║ ║║ ═ ║║ ╔╗ ║║║ ║║RAINNOUS ≡≡║ ╚╝ ║║ ╚╝ ║║║║ ║║ ╞╣║ ║║ ║║ ║ ═╣║ ╥ ║║║║ ║ ║║ ═ ║║ ╚╝ ║║ ║ ║ 高佑麗╚═╩═╝╚═╩═╝╚╝╚═╚═╝╚═══╝╚═══╝╚═╩═╝鄭允慧 趙賢榮金智淑盧 乙吳勝雅ψmocki -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115 ※ 編輯: loveme00835 來自: 140.121.197.115 (07/08 21:57)
diabloevagto:function scope是說using寫在function內,非global? 07/08 22:06
loveme00835:是的, 在 namespace 底下用也有的, 但要注意不要出現 07/08 22:10
loveme00835:header 中 07/08 22:10
diabloevagto:底下用也有的??抱歉,我有點看不懂意思 07/08 22:29
LPH66:在自己的 namespace 底下 using 其他的 namespace 這樣 07/08 23:52