无法使用类型 'const char [X]' 的左值初始化类型 'const signed char *' 的成员子对象

Cannot initialize a member subobject of type 'const signed char *' with an lvalue of type 'const char [X]'

本文关键字:char const 类型 signed 初始化 对象 成员      更新时间:2023-10-16

我有以下代码:

typedef       signed char         Char;
static const struct MyStruct
{
    const Char* str;
    // Other fields
}
myList[] =
{
    {"none", /* Other fields */},
    {"main", /* Other fields */},
}

但是我有编译错误:

无法使用类型为"const char [X]"的左值初始化类型为"const Char *"(也称为"const signed char *")的成员子对象

X 是字符串长度

当我用char替换Char时可以,但是如何使用signed char

例如

"none"是一种const char[5]类型。在某些情况下,这可能会衰减const char*

无论您的平台上charsigned还是unsignedcharsigned charunsigned char始终是不同的类型。

C++不允许将const char[N]类型直接衰减为除const char*(或指向typedef const char*的指针)以外的任何内容,因此在您的情况下,需要发出诊断。

C++您还有许多其他选择:std::string是您情况下的明显选择。

要检查您拥有的char类型,请使用

std::numeric_limits<char>::is_signed

<limits>.

但是我如何使用签名字符?

通过使用 signed char 数组而不是字符串文本:

signed char none[] = {'n','o','n','e',''};
...
myList[] =
{
    {none, /* Other fields */},
    ...
}

请注意,char(字符文本的类型)可能是无符号的,如果该值不能由 signed char 表示,则结果值将由实现定义。