2012-01-30 71 views
0

我正在使用unicode字符集(泛型要求太過於只使用unicode)。 我想以某種方式將TCHAr數組的內容放入std :: string obj中,以便我可以使用此obj的函數。 我的代碼片段如下:將TCHAr數組賦值(轉換)爲std :: string對象時發生構建錯誤

TCHAR arr[256]; 
std::wstring w_str; 
std::string s_str; 

w_str(arr); ---> Error 1 
s_str(w_str.begin,w_str.end); ---> Error 2. 

錯誤1:我剛開了錯誤C2064:「術語不計算爲 函數取1個參數

錯誤2:我剛開錯誤C2064:「術語不計算爲 取2個參數的函數。

任何人都可以在此幫助我;讓我知道如何將一個TCHAR的內容(使用unicode字符集)分配給一個字符串對象。

+0

我假設您正在尋找'w_str = arr;',但您的代碼還存在其他問題。 – 2012-01-30 08:27:35

+0

是的,我想將tchar [256]數組轉換成字符串對象(wstring或string),這樣我就可以在wstring或string中使用像substr()等函數。 – codeLover 2012-01-30 08:49:21

回答

0

您正在試圖調用字符串對象的功能(即調用operator()),但std::basic_string(從std::stringstd::wstring是通過typedef)沒有該運營商。相反,你應該構建字符串時做初始化:

不過,我覺得你還是會得到一個錯誤與上施工,因爲std::stringstd::wstring使用不同的字符類型。

0

我假設你試圖調用std::wstringstd::string的構造函數,但是你做錯了。相反,在聲明時初始化對象:

TCHAR arr[256]; 
std::wstring w_str(arr); 
std::string s_str(w_str.begin(), w_str.end()); 

雖然這並不能解決所有問題。您不能直接從Unicode(寬)字符串轉換爲窄字符串。你將不得不做一些轉換。有關可能的解決方案,請參閱this question

雖然要求這一點很奇怪。選擇一個字符串類型並堅持下去。如果您正在編程Windows並因此使用Unicode字符串,則希望始終使用std::wstring

+0

上面聲明的問題是,w_str是一個全局變量,它將被填充到一個函數中&TCHAR arr [256]是這個函數內部的一個局部數組變量。那麼我怎樣才能使用arr初始化w_str(arr)。 ? – codeLover 2012-01-30 07:56:33

相關問題