【问题标题】:cannot convert from 'unsigned short [9]' to 'char []'无法从“无符号短 [9]”转换为“字符 []”
【发布时间】:2018-05-14 20:14:59
【问题描述】:

我正在处理非常古老的 C++ 项目。在 Visual Studio 6 中构建我的 C++ 代码时,我收到错误 "cannot convert from 'unsigned short [9]' to 'char []'"

下面的代码:

char    variable[] = _T("something");

我用谷歌搜索并试图了解这个问题。这可能是我构建它的方式。

我已经尝试过用https://mihai-nita.net/2006/07/23/visual-studio-unicode-projects/ 编写的步骤(在预处理器中添加UNICODE_UNICODE)。如果有人可以提出解决此错误的解决方案,那将非常有帮助。

【问题讨论】:

  • 看起来 _T 正在为您提供比 char 更宽的字符。要么全部使用 Unicode,要么不使用任何 Unicode。也就是说,现在是 2018 年。使用 Unicode。

标签: c++ visual-studio c-strings tchar visual-studio-6


【解决方案1】:

_T 宏根据UNICODE 宏的状态扩展为窄或宽字符串文字。如果UNICODE 未定义_T 将扩展为char 字符串,如果UNICODE 已定义_T 将扩展为宽字符字符串。

如果您使用_T,则应使用TCHAR 类型,根据UNICODE 宏的状态,该类型同样会扩展为charwchar_t

TCHAR variable[] = _T("something");

这将扩展为

char variable[] = "something";

如果UNICODE 未定义,则会扩展为类似

wchar_t variable[] = L"something";

如果 UNICODE 已定义。

值得注意的是,wchar_t 在早期版本的 Visual C++ 中并不是真正的类型,而只是 typedef 用于(或宏扩展为)unsigned short,这就是您出现错误消息的原因看到引用而不是 wchar_t

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 2012-06-03
    • 2013-02-16
    • 1970-01-01
    • 2011-09-29
    • 2015-10-21
    • 1970-01-01
    相关资源
    最近更新 更多