2017-10-11 132 views
3

的左值“常量符号字符*”我有以下代码:无法初始化类型的成员子对象类型“为const char [X]”

typedef  signed char   Char; 

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

但我有编译错误:

不能初始化类型的成员子对象 '为const char *' 与类型为const char的”左值[X](又名 'const的符号字符*')

X是串楞th

没问题当我用char替换Char,但是如何使用signed char

回答

4

"none",例如是const char[5]类型。在某些情况下,这可以衰退const char*

无论以char是否是你的平台,charsigned charsignedunsigned,并unsigned char总是截然不同的类型。

C++不允许超过const char*以外的任何(或指向的const char*一个typedef)一const char[N]类型的直接衰减,所以在你的情况下,需要发出一个诊断。

在C++中,您有很多其他选择:std::string是您的案例中的明显选择。

要检查的char你的类型,使用

std::numeric_limits<char>::is_signed 

<limits>

+0

感谢您的快速回答。我怎么知道char是有符号还是无符号? –

+0

@ A.Pissicat:结束了这件事。 – Bathsheba

+0

不错,我会纠正我的代码。谢谢。 –

2

但我该如何使用signed char?

通过使用的signed char代替一个字符串数组:

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

... 

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

注意char(字符数的类型)可以是无符号的,并且如果该值不表示的由signed char,然后结果值将被实现定义。

相关问题