我正在使用一个2019年的视觉工作室。我也在使用Charles Petzold -编程Windows -第5版,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")
};
发布于 2020-05-22 01:35:41
字符串文本是const
数据,类型为const <char>[N]
,它将衰变为const <char> *
。其中<char>
是char
、wchar_t
、char16_t
或char32_t
,这取决于文字前面的类型前缀(L
表示wchar_t
,u
表示char16_t
,U
用于char32_t
,u8
用于char
/char8_t
)。如果未指定前缀,则使用char
。
定义UNICODE
时,TCHAR
是wchar_t
的别名,TEXT()
在指定的文字前面放置L
前缀。如果未定义UNICODE
,则TCHAR
是char
的别名,TEXT()
省略前缀。
因此,对字符串文本调用TEXT()
有效地生成了一个const TCHAR[N]
,该const TCHAR[N]
随后衰变为const TCHAR *
。
您的结构包含指向非构造TCHAR
的指针。您不能用TCHAR*
中的“指向非const的指针”(const TCHAR*
)来初始化“指向非const的指针”( C++11中的“指向非const的指针”(const TCHAR*
)),也不能用更高的版本(在C中和2011年之前的C++中可以)初始化“指向非const的指针”( C++)。因此,您需要将szText
更改为指向const TCHAR
的指针,例如:
struct {
int iStyle;
const TCHAR* szText;
}
或者:
struct {
int iStyle;
TCHAR const * szText;
}
或者,您可以使用LPCTSTR
别名,它是const TCHAR*
的别名,例如:
struct {
int iStyle;
LPCTSTR szText;
}
https://stackoverflow.com/questions/61946044
复制相似问题