Re: [問題] vc++ 字元集設定

看板C_and_CPP (C/C++)作者 (Alien)時間16年前 (2010/02/15 11:09), 編輯推噓2(208)
留言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
GNROOT使用下述指令定義
02/15 12:18, 1F

02/15 12:18, , 2F
#define GN_ROOT "Global\\"
02/15 12:18, 2F

02/15 12:21, , 3F
覺得奇怪的地方就是為什麼使用多位元組字元集後,string
02/15 12:21, 3F

02/15 12:24, , 4F
就能去接LPCTSTR
02/15 12:24, 4F

02/15 12:25, , 5F
此時的string不是std::basic_string<char>嗎?
02/15 12:25, 5F

02/15 12:25, , 6F
謝謝你的回答
02/15 12:25, 6F

02/15 13:24, , 7F
因為 MBCS 底下,TCHAR 就單純是 char 而已,一切都是
02/15 13:24, 7F

02/15 13:25, , 8F
char (LPTCSTR = char*, string = basic_string<char>)
02/15 13:25, 8F

02/15 13:25, , 9F
所以當然沒問題
02/15 13:25, 9F

02/15 13:26, , 10F
btw, 恐怕 GN_ROOT 也可能有問題 (不太肯定)
02/15 13:26, 10F
文章代碼(AID): #1BUBi3-s (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BUBi3-s (C_and_CPP)