首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >visual c++:类型"const wchar_t *“的值不能用于初始化"TCHAR *”类型的实体

visual c++:类型"const wchar_t *“的值不能用于初始化"TCHAR *”类型的实体
EN

Stack Overflow用户
提问于 2020-05-22 00:42:19
回答 1查看 926关注 0票数 0

我正在使用一个2019年的视觉工作室。我也在使用Charles Petzold -编程Windows -第5版,291页。如何在文本上修复此错误?

代码语言:javascript
运行
复制
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") 
};
EN

回答 1

Stack Overflow用户

发布于 2020-05-22 01:35:41

字符串文本是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[N]随后衰变为const TCHAR *

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

代码语言:javascript
运行
复制
struct {
    int          iStyle;
    const TCHAR* szText;
}

或者:

代码语言:javascript
运行
复制
struct {
    int           iStyle;
    TCHAR const * szText;
}

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

代码语言:javascript
运行
复制
struct {
    int      iStyle;
    LPCTSTR  szText;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61946044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档