【问题标题】:Error with CString when I import into VC++2005?导入 VC++2005 时 CString 出错?
【发布时间】:2013-01-09 15:03:57
【问题描述】:
我在 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";
【问题讨论】:
标签:
c++
visual-c++
mfc
visual-c++-6
visual-c++-2005
【解决方案1】:
注意VC++6.0的默认编译模型是ANSI/MBCS(即TCHAR是char,CString是char的序列等),而不是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"%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”部分)存储在应用程序资源中并从那里加载它,而不是在源代码中构建它。