1

我在 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";
4

1 回答 1

2

注意VC++6.0的默认编译模型是ANSI/MBCS(即TCHAR是a char,CStringchar's的序列等),而VC++2005的默认编译模型是Unicode(即TCHARis wchar_t,CString实际上是a CStringW,ie一个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”部分)存储在应用程序资源中并从那里加载它,而不是在源代码中构建它。

于 2013-01-09T16:00:18.117 回答