Re: [問題] enum用法?
: → 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
≡≡≡≡║ ╚╝ ║║ ╚╝ ║║║║ ║║ ╞╣║ ║║ ║║ ║≡≡≡≡
≡≡≡≡║ ═╣║ ╥ ║║║║ ║ ║║ ═ ║║ ╚╝ ║║ ║ ║≡≡≡≡
≡高佑麗╚═╩═╝╚═╩═╝╚╝╚═╚═╝╚═══╝╚═══╝╚═╩═╝鄭允慧≡
≡≡≡≡≡趙賢榮≡≡≡金智淑≡≡≡RAINBOW≡≡≡盧 乙≡≡≡吳勝雅≡ψmocki
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
※ 編輯: loveme00835 來自: 140.121.197.115 (07/08 21:57)
→
07/08 22:06, , 1F
07/08 22:06, 1F
→
07/08 22:10, , 2F
07/08 22:10, 2F
→
07/08 22:10, , 3F
07/08 22:10, 3F
→
07/08 22:29, , 4F
07/08 22:29, 4F
推
07/08 23:52, , 5F
07/08 23:52, 5F
討論串 (同標題文章)