2011-01-06 80 views
0

我有一個程序,我需要使用Format();函數將字符串文字和int整合到一個CString變量中。我試圖這樣做的幾種不同的方式,對他們的代碼是在這裏:在C++中轉換類型時出錯

// declare variables used 
CString _CString; 
int _int; 

// try to use format function with string literal 
_CString.Format("text",_int); 

// try to use format function with C-Style cast 
_CString.Format((wchar_t)"text",_int); 

// try to use format function with static_cast 
_CString.Format(static_cast<wchar_t>("text"),_int); 

第一個返回錯誤C2664:「無效ATL :: CStringT ::格式(常量爲wchar_t *,...)」 :無法將參數1從'const char [33]'轉換爲'const wchar_t *'

對於第二個,沒有錯誤,但文本以中文字符顯示。

第三個返回錯誤C2440:'的static_cast:不能從 '爲const char [33]' 到 'wchar_t的'

任何想法轉換爲轉換CStrings到wchar_t的* S?
感謝

+0

這是超級nitpicky,但從技術上講,你不應該命名變量名稱的下劃線後跟大寫字母。這些名稱由實現保留,無論他們感覺如何(包括任意性的惡意宏)。只是想我會提到這是一個供參考。 – templatetypedef 2011-01-06 06:32:22

回答

1

的問題是,你正在執行UNICODE版本(這是好的),所以

_CString.Format(); 

功能我期待的第一個參數是寬字符的字符串。您需要使用L""語法來形成一個寬字符字符串文字:

_CString.Format(L"text",_int); 

當然,你需要一個說明符實際獲得int變量格式化爲CString的:

_CString.Format(L"text: %d",_int); 

如果包含tchar.h標題,則可以使用Microsoft的宏將字符串文字製作爲寬字符或常規字符(也稱爲ANSI),具體取決於您是否構建UNICODE:

_CString.Format(_T("text: %d)",_int); 

但我想說,除非你打算支持需要ANSI支持的遺留東西,否則我可能不會打擾tchar.h的東西。

+0

謝謝! L「」語法起作用! – 2011-01-07 03:01:41

2

嗯,這是不完全清楚你想定位的目標字符串類型,但這裏是我會做:

_CString.Format(_T("%d"), _int); 

嘗試輸入蒙上了多字節串到Unicode字符串可能會編譯,但是它要求很麻煩,因爲它仍然是一個多字節字符串。你需要轉換整個字符串,而不是僅僅轉換它,如果這是你想要的。