2013-01-09 62 views
1

我在VC++ 6.0中編寫代碼並將其導入到VC++ 2005中。 現在我得到一個模糊的錯誤與unicode插入?當我導入到VC++ 2005時CString出錯?

CString s; 

s.Format("%f\r\n", (double)timebTime.time + (double)timebTime.millitm/1000); 
s+="RAMP,"; 
s+=0x00b5; // <-- Error: VC++(2005): "error C2593: 'operator +=' is ambiguous" 
s+="m"; 
+0

什麼是''...? –

+0

用CString更新 – jdl

+0

這是來自_MFC_的東西,對吧? –

回答

2

需要注意的是VC++ 6.0的默認編譯模型是ANSI/MBCS(即TCHARcharCStringchar的序列等),而不是VC++ 2005的默認編譯模型是Unicode(即TCHARwchar_t,CString實際上是CStringW,即wchar_t字符串)。

我只是使用Unicode模式(不符合ANSI/MBCS的兼容性和TCHAR_T("...")等麻煩),並調整這樣的代碼:

static const wchar_t microSign = 0x00B5; 

CString s; 
s.Format(L"%f\r\n", 
    static_cast<double>(timebTime.time) + 
    static_cast<double>(timebTime.millitm)/1000.0); 
s += L"RAMP,"; 
s += microSign; 
s += L"m"; 

注意的是,使用一個命名常量(如microSign)使代碼比「幻數」(如0x00B5)更具可讀性。

此外,我會將格式字符串(包括「RAMP,µm」部分)存儲在應用程序資源中,並從那裏加載它,而不是在源代碼中構建它。