导入VC ++ 2005时CString出错?

时间:2013-01-09 15:03:58

标签: c++ visual-c++ mfc vc6 visual-c++-2005

我在VC ++ 6.0中编写代码并将其导入VC ++ 2005。 我现在收到unicode插入的模糊错误了吗?

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";

1 个答案:

答案 0 :(得分:2)

请注意,VC ++ 6.0的默认编译模型是ANSI / MBCS(即TCHARcharCStringchar的序列,等)VC ++ 2005的默认编译模型是 Unicode (即TCHARwchar_tCString实际上是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”部分)存储在应用资源中并从那里加载,而不是在源代码中构建它。