Re: [問題] vc++ 字元集設定
看板C_and_CPP (C/C++)作者adrianshum (Alien)時間16年前 (2010/02/15 11:09)推噓2(2推 0噓 8→)留言10則, 2人參與討論串2/2 (看更多)
※ 引述《carl71321 (Christopher)》之銘言:
: ( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
: ( 未必需要依照此格式,文章條理清楚即可 )
: 遇到的問題: (題意請描述清楚)
: 宣告了一函數如下,如果把visual studio
: 內專案的字元集設定設定成UNICODE,編譯後即會出現
: 錯誤 1 error C2664: '
: std::basic_string<_Elem,_Traits,_Ax>
: &std::basic_string<_Elem,_Traits,_Ax>::
: append(const std::basic_string<_Elem,_Traits,_Ax> &)'
: : 無法將參數 1 從 'LPCTSTR' 轉換成
: 'const std::basic_string<_Elem,_Traits,_Ax> &'
: 但如使用多位元組字元集,即能夠正確的編譯,請問這是什麼呢?
: 先謝謝大家的幫忙。
: string MakeGlobalName(LPCTSTR lpsName) {
: string ret;
: ret = GN_ROOT;
: ret.append(lpsName);
: return ret;
: };
: 使用的平台為visual studio 2008 win32主控台應用程式。
因為 LPCTSTR (其實所有 TCHAR 系列的東西都一樣)
會根據你是 UNICODE 還是 MBCS 來決定是替換成 wchar_t
還是 char.
std::string 其實是 std::basic_string<char>
在 UNICODE 的環境裡面,你的 method 其實是:
basic_string<char> MakeGlobalName(wchar_t* lpsName) {
basic_string<char> ret;
ret = GN_ROOT; // 我猜 GN_ROOT 也是 LPCTSTR 吧?
// 即是也是 wchar_t*
ret.append(lpsName);
return ret;
}
ret expect 的是 char, 你傳的東西是 wchar_t, 當然出問題了。
解決方法之一就是讓 ret 也會根據 UNICODE/MCBS 來變成適當
的 type:
basic_string<TCHAR> MakeGlobalName(LPCTSTR name) {
basic_string<TCHAR> ret;
:
:
}
(忘了 VC++ 有沒有提供方便的 macro 替換 basic_string<TCHAR> 了)
解決方法二就是... 只 support UNICODE, 東西也通通直接寫 UNICODE
的版本(wchar_t, std::wstring etc).... :P
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.79.103.239
※ 編輯: adrianshum 來自: 219.79.103.239 (02/15 11:12)
推
02/15 12:18, , 1F
02/15 12:18, 1F
→
02/15 12:18, , 2F
02/15 12:18, 2F
推
02/15 12:21, , 3F
02/15 12:21, 3F
→
02/15 12:24, , 4F
02/15 12:24, 4F
→
02/15 12:25, , 5F
02/15 12:25, 5F
→
02/15 12:25, , 6F
02/15 12:25, 6F
→
02/15 13:24, , 7F
02/15 13:24, 7F
→
02/15 13:25, , 8F
02/15 13:25, 8F
→
02/15 13:25, , 9F
02/15 13:25, 9F
→
02/15 13:26, , 10F
02/15 13:26, 10F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章