c++ - 导入 VC++2005 时 CString 出错?

标签 c++ visual-c++ mfc visual-c++-6 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";

最佳答案

注意VC++6.0默认的编译模型是ANSI/MBCS(即TCHAR是一个charCString是一个序列char 等),而 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)使代码比 “魔数(Magic Number)”(如 0x00B5)更具可读性。

此外,我会将格式字符串(包括“RAMP,µm”部分)存储在应用程序资源中并从那里加载它,而不是在源代码中构建它。

关于c++ - 导入 VC++2005 时 CString 出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14238174/

相关文章:

.net - 如何将 System::String^ 转换为 std::string?

c++ - OPENCV:image_proc 中的 PCA 应用程序错误

c++ - qsort线程安全吗?

visual-c++ - 无效的对话框模板名称 MFC

c++ - 如何在 C++ 中使用 cout 打印带 2 位小数的 float

c++ - std::string 在传递给库时会损坏/更改结构

c++ - 有没有办法在 QTableView 的顶部显示文本行?

c++ - 是否可以强制不内联函数?

c++ - 如何在列表控件中创建右键单击菜单?

java - xml 解析在 C/C++ 或 Java 中更快?