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 *"
>我正在使用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>
是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 *
。
您的结构包含指向非常量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;
}
相关文章:
- 不能将 "void *" 类型的值分配给类型 "TCHAR" 的实体
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 无法将错误分配给成员函数中"类型的实体"
- "const wchar_t *" 类型的值不能用于初始化类型 "const PWSTR" 的实体
- Visual Studio C++:不能使用类型为 "const wchar_t *" 的值来初始化类型为 "TCHAR *" 的实体
- 不能将 "void *" 类型的值分配给类型 "RANDOMSTRUCT *" 的实体
- 回调方法显示错误,类型为"void(*)"的值不能用于初始化类型的实体
- 智能感知:不能使用 "PVOID" 类型的值初始化 "_NtQuerySystemInformation" 类型的实体
- 不能将 "const char*" 类型的值分配给类型 "int" 的实体
- 类型值不能用于初始化类型实体
- 不能将 "const char *" 类型的值分配给类型为 "LPSTR" 的实体
- c 11申请人(e)是e命名的实体的类型
- 错误:无法将 "double*" 类型的值分配给类型 "double" 的实体
- 智能感知:不能将 "void" 类型的值分配给类型 "double" 的实体
- 值类型 const char 不能用于初始化 char* 类型的实体
- ECS实体可以有多个给定类型的组件
- "char *" 类型的值不能用于初始化类型 "char" 的实体
- "const wchar_t *" 类型的值不能用于初始化类型为 "LPCSTR" 的实体
- 如何确定Tcl_Obj是否是某种类型的 ttk:: 实体,例如 ttk:entry
- 标识派生类类型的正确方法(类型实体VS dynamic_case)