VisualStudioC++:“const WCARUT**”类型的值不能用于初始化“TCHAR *”类型的实体

VisualStudioC++:“const WCARUT**”类型的值不能用于初始化“TCHAR *”类型的实体,c++,visual-studio,text,C++,Visual Studio,Text,我正在使用VisualStudio2019。我也在使用Charles Petzold-编程Windows-第五版,第291页。如何修复文本上的此错误 字符串文字是常量数据,类型为const[N],衰减为const*。其中是char、wchar\u t、char16\u t或char32\u t,具体取决于wchar\u t的文字L前面的类型前缀、char16\u t的类型前缀、char32\u t的类型前缀以及char/char8\u t的类型前缀。如果未指定前缀,则使用char 定义UNICO

我正在使用VisualStudio2019。我也在使用Charles Petzold-编程Windows-第五版,第291页。如何修复文本上的此错误

字符串文字是常量数据,类型为const[N],衰减为const*。其中是char、wchar\u t、char16\u t或char32\u t,具体取决于wchar\u t的文字L前面的类型前缀、char16\u t的类型前缀、char32\u t的类型前缀以及char/char8\u t的类型前缀。如果未指定前缀,则使用char

定义UNICODE时,TCHAR是wchar\u t的别名,文本在指定的文本前面放置一个L前缀。如果未定义UNICODE,则TCHAR是char的别名,文本将省略前缀

因此,在字符串文本上调用文本可以有效地生成一个const TCHAR[N],然后它会衰减为const TCHAR*

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

或:

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


你是用C++写的吗?也就是说,使用C++编译器,那本书是一本C书,我相信它是一个常数指针。基于错误消息struct{int iStyle;const TCHAR*szText;}
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") 
};
struct {
    int          iStyle;
    const TCHAR* szText;
}
struct {
    int           iStyle;
    TCHAR const * szText;
}
struct {
    int      iStyle;
    LPCTSTR  szText;
}