1. 程式人生 > >MFC 錯誤:沒有與引數列表匹配的 過載函式

MFC 錯誤:沒有與引數列表匹配的 過載函式

CString str;
str.Format("Fuck %d",count);//這句話報錯
m_static.SetWindowTextW(str):

錯誤是: 2 IntelliSense: 沒有與引數列表匹配的 過載函式 "ATL::CStringT<BaseType, StringTraits>::Format [其中 BaseType=wchar_t, StringTraits=StrTraitMFC<wchar_t, ATL::ChTraitsCRT<wchar_t>>]" 例項
            引數型別為: (const char [8], int)
            物件型別是: CString g:\C++\Static\Static\StaticDlg.cpp 99 5 Static 解決方案: str.Format(_T("Fuck %d"),count);或str.Format(L"Fuck %d",count); 解釋:
注意字元(串)有兩種型別,char(*)和wchar_t(*)型,分別用於多位元組字元和unicode字元,兩種型別分別有一套對應的字串處理函式(包括C/C++標準庫,WindowsAPI,MFC等)。MFC的類和函式會根據工程設定(預設為wchar_t)自動匹配,因此這時Format要求的字串引數為wchar_t*,所以要在字串前加上“L”表示是wchar_t型字串,或者加上_T(),_T同樣會根據工程設定自動匹配char或wchar_t。
下面一句也建議寫成m_static.SetWindowText(str):(去掉W),SetWindowText其實也有兩個函式SetWindowTextA(用於char)和SetWindowTextW(用於wchar_t),而SetWindowText本身會根據工程設定自動匹配使用A或W