作者loveme00835 (高髮箍)
看板C_and_CPP
標題Re: [問題] enum用法?
時間Sun Jul 8 21:44:41 2012
: → 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)
→ 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