Visual Studio C++:不能使用类型为 "const wchar_t *" 的值来初始化类型为 "TCHAR *" 的实体

visual studio c++ : a value of type "const wchar_t *" cannot be used to initialize an entity of type "TCHAR *"

本文关键字:类型 实体 TCHAR 初始化 const C++ Studio 不能 Visual wchar      更新时间:2023-10-16

>我正在使用Visual Studio 2019。我也在使用Charles Petzold - Programming Windows - 5th Ed,第291页。如何在文本上修复此错误?

struct {
int     iStyle;
TCHAR*  szText;
} 
button[] = { 
BS_PUSHBUTTON,      TEXT ("PUSHBUTTON"),
BS_DEFPUSHBUTTON,   TEXT ("DEFPUSHBUTTON"),
BS_CHECKBOX,        TEXT ("CHECKBOX"),
BS_AUTOCHECKBOX,    TEXT ("AUTOCHECKBOX"),
BS_RADIOBUTTON,     TEXT ("RADIOBUTTON"),
BS_3STATE,          TEXT ("3STATE"),
BS_AUTO3STATE,      TEXT ("AUTO3STATE"),
BS_GROUPBOX,        TEXT ("GROUPBOX"),
BS_AUTORADIOBUTTON, TEXT ("AUTORADIO"),
BS_OWNERDRAW,       TEXT ("OWNERDRAW") 
};

字符串文字是const数据,类型为const <char>[N],衰减为const <char> *。 其中<char>charwchar_tchar16_tchar32_t,取决于文字前面的类型前缀(L表示wchar_tu表示char16_tU表示char32_tu8表示char/char8_t(。 如果未指定前缀,则使用char

定义UNICODE时,TCHARwchar_t的别名,TEXT()L前缀放在指定的文本前面。 如果未定义UNICODE,则TCHARchar的别名,TEXT()省略前缀。

因此,在字符串文字上调用TEXT()有效地产生了一个const TCHAR[N],然后衰减到const TCHAR *

您的结构包含指向非常量TCHAR的指针。 您不能在 C++11 及更高版本中将"指向 const 的指针"(TCHAR*(初始化为"指向 const 的指针"(const TCHAR*((您可以在 C 和 2011 年之前的 C++ 中(。 因此,您需要将szText更改为指向const TCHAR的指针,例如:

struct {
int          iStyle;
const TCHAR* szText;
}

或:

struct {
int           iStyle;
TCHAR const * szText;
}

或者,您可以使用LPCTSTR别名,它是const TCHAR*的别名,例如:

struct {
int      iStyle;
LPCTSTR  szText;
}
相关文章: