VS2013 Unicode中的C ++多行CString文字

时间:2015-11-26 07:30:52

标签: c++ visual-studio-2013 unicode

在VS2012(带MBCS)中没有眨眼接受的多行CString文字'str1'现在在升级到VS2013(使用Unicode)后,在构建时被拒绝,以减轻新弃用的MBCS中的大量错误,即使在安装之后它的插件),输出消息:

  

错误C2308:连接不匹配的字符串

如以下示例(A)所示:

str1 = _T("     HELP - available commands \n\n\n"
          "F1    :   the present help message \n\n");

第一行报告为“宽”,第二行报告为“窄”。

然后我尝试(B)添加单行CString文字:

str1 =   _T("     HELP - available commands \n\n\n")
       + _T("F1    :   the present help message \n\n");

但是IDE已经抱怨了

  

错误:表达式必须具有整数或未整合的枚举类型

的构建器
  

错误C2110:'+':无法添加两个指针

如果我逐个构建(C)具有单行文字的CString str1,它确实有效:

str1  = _T("     HELP - available commands \n\n\n");
str1 += _T("F1    :   the present help message \n\n");

但我想理解为什么(A)和(B)在这里没有按预期工作,因为它们一直如此。在这个(大)程序中有几个这样的问题,但在大多数其他类似的情况下,它确实可以正常工作。

是否由于VS2013或(和?)从MBCS切换到Unicode而发生了变化?我在这些字符串中忽略了哪些特殊字符?然后,如何解决这些问题?

提前感谢您的回复。

1 个答案:

答案 0 :(得分:1)

应该是:

str1  = _T("     HELP - available commands \n\n\n") // no semicolon here
        _T("F1    :   the present help message \n\n");

之前工作的原因是_T是MBCS的无操作,但Unicode扩展为宽度前缀。在C / C ++中,串联只是通过使它们与空格相邻,但它们需要相同的前缀,至少对于MSVC而言。