我有以下代码:
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
?
答案 0 :(得分:4)
"none"
,例如const char[5]
类型。在某些情况下,这可以衰减到const char*
。
无论您的平台上char
是signed
还是unsigned
,char
,signed char
和unsigned 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
无法表示该值,则结果值将是实现定义。