在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而发生了变化?我在这些字符串中忽略了哪些特殊字符?然后,如何解决这些问题?
提前感谢您的回复。
答案 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而言。