MFC AfxMessageBox() 簡單問題
AfxMessageBox(“恭喜你過關了");
error: none of the 2 overloads could convert all the argument
但是用 AfxMessageBox(_T("恭喜恭喜,過關了"));就沒有問題。
解決方案:
1:VC8之後的版本創建的工程默認使用UNICODE字符串,帶有_T()宏處理的字符串在編譯時可以自動轉換,不帶這個宏的字符串是按照單字節處理,造成無法適配函數的參數。
<span style="font-size:13px">2:你的環境設置是UNICODE的,所以這個AfxMessageBox只接收UNICODE的字符,要想AfxMessageBox(“恭喜你過關了");
能使用,把VS裏面的,項目->屬性->配置屬性中的字符集,改成多字節字符就OK了 (在VS裏面默認字符集是UNICODE的)! </span>
<span style="font-size:13px">-------------------------------------------------------------------------</span><span style="font-size:13px"></span>
T("Hello")是一個宏,他的作用是讓你的程序支持Unicode編碼,因爲Windows使用兩種字符集ANSI和UNICODE,前者就是通常使用的單字節方式,但這種方式處理象中文這樣的雙字節字符不方便,容易出現半個漢字的情況。而後者是雙字節方式,方便處理雙字節字符。
<span style="color:#000099;">1:C++語言中“_T”是什麼意思?
Visual C++裏邊定義字符串的時候,用_T來保證兼容性,VC支持ascii和unicode兩種字符類型,用_T可以保證從ascii編碼類型轉換到unicode編碼類型的時候,程序不需要修改。 如果將來你不打算升級到unicode,那麼也不需要_T。</span>
<span style="color:#000099;">_t("hello world") 在ansi的環境下,它是ansi的,如果在unicode下,那麼它將自動解釋爲雙字節字符串,既unicode編碼。
這樣做的好處,不管是ansi環境,還是unicode環境,都適用。 </span>
<span style="color:#ff0000;">2:請問在vc++中的字符串_T("ABC")和一個普通的字符串“ABC”有什麼區別?
_T("ABC")中的一個字符和漢字一樣,佔兩個字節(unicode編碼)。而在"ABC"中,英文字符佔一個字節,漢字佔兩個字節(ascii編碼)。</span>