【发布时间】:2019-10-31 09:26:14
【问题描述】:
在VS2008中,我尝试从一个char构造一个CString,如下:
CString str = CString(_T('A') + 5);
但是会得到如下编译错误:
错误 C2440: '' : 无法从 'int' 转换为 'CString'
我相信 TCHAR 和 int 在 C++ 中是可交换的,为什么它拒绝接受 TCHAR 类型参数来构造 CString?
该行的目的是构造一个只有一个字符_T('F') 的CString。不要拿“A5”。
我尝试了解编译器如何处理代码,如下:
它将首先将 _T('A') 提升为整数。
它将_T('A')的整数值加5。
它会得到一个新的整数,但找不到将它转换回TCHAR的方法,它可以用作CString构造函数的输入参数。
【问题讨论】:
-
停止使用 tchar。在这里查看我的答案:stackoverflow.com/a/50572941/104458
-
我不确定你想做什么,但如果你想得到
A5,那么str.Format(L"%c%d", 'A', 5);就可以了。 -
@MaxVollmer,CString 有一个可以从 TCHAR 构造的构造函数
-
@Blaze,我正在尝试用一个字符 _T('F') 构造一个 CString。
-
那么你可能想要
CStringA((char)('A' + 5))或CStringW((wchar_t)(L'A' + 5))