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

时间:2017-10-11 10:13:39

标签: c++

我有以下代码:

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

2 个答案:

答案 0 :(得分:4)

"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>

答案 1 :(得分:2)

  

但是如何使用signed char?

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

signed char none[] = {'n','o','n','e','\0'};

...

myList[] =
{
    {none, /* Other fields */},
    ...
}

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

相关问题