我用vc++ 6.0编写代码,导入到vc++ 2005中。我得到一个模糊的错误与unicode插入现在?
CString s;
s.Format("%frn", (double)timebTime.time + (double)timebTime.millitm / 1000);
s+="RAMP,";
s+=0x00b5; // <-- Error: VC++(2005): "error C2593: 'operator +=' is ambiguous"
s+="m";
注意vc++ 6.0的默认编译模型是ANSI/MBCS(即TCHAR
是char
, CString
是char
's的序列,等等),而vc++ 2005的默认编译模型是Unicode(即TCHAR
是wchar_t
, CString
实际上是CStringW
,即wchar_t
字符串)。
我只使用Unicode模型(不需要ANSI/MBCS兼容性和TCHAR
, _T("...")
等),并像这样调整代码:
static const wchar_t microSign = 0x00B5;
CString s;
s.Format(L"%frn",
static_cast<double>(timebTime.time) +
static_cast<double>(timebTime.millitm) / 1000.0);
s += L"RAMP,";
s += microSign;
s += L"m";
注意,使用命名常量(如microSign
)比使用"幻数"(如0x00B5
)使代码更具可读性。
此外,我会在应用程序资源中存储格式字符串(包括"RAMP,µm
"部分),并从那里加载它,而不是在源代码中构建它。