无法使用类型 'const char [X]' 的左值初始化类型 'const signed char *' 的成员子对象
Cannot initialize a member subobject of type 'const signed char *' with an lvalue of type '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 [X]"的左值初始化类型为"const Char *"(也称为"const signed char *")的成员子对象
X 是字符串长度
当我用char
替换Char
时可以,但是如何使用signed char
?
例如
"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>
.
但是我如何使用签名字符?
通过使用 signed char
数组而不是字符串文本:
signed char none[] = {'n','o','n','e',' '};
...
myList[] =
{
{none, /* Other fields */},
...
}
请注意,char
(字符文本的类型)可能是无符号的,如果该值不能由 signed char
表示,则结果值将由实现定义。
相关文章:
- 在字符串函数中抛出'char const*'实例后调用的终止
- 双重标准?为什么只有 char* const&a = "bla" 的警告?
- 包括"lvtocon.h",未定义对'operator<<(std::ostream&, char const*)的引用
- 为什么 const char* const & = 可以编译"hello"?
- 将字符串文本常量定义为 char const* 和 wchar const*
- 如何将std::wstring转换为char const[]
- "char const * name() const _WEBSOCKETPP_NOEXCEPT_TOKEN_ {"剂量是什么意思
- 使用提升对字符串进行标记化时,将令牌转换为 char* const* 时失败
- 如何从 std::initializer_list<char const* 构建 std::vector<std::string>>
- 将 std::vector<std::string> 转换为 const char* const*
- 引发"char const*"错误的实例后调用的终止
- 将const char * const参数成员分配给新值
- 从'const char**'到'char* const*'的转换无效
- 从 sub_match<常量字符 *>' 转换为'const char *const &'
- char*const和constchar*之间有什么区别?(重复-需要更多澄清)
- 使用工厂方法时编译器错误:无法转换"const std::p air<char* const
- HEVC 解码器端口 Android 警告:从 'signed char*' 到 'char const* 的转换无效*
- 如何从'char const*'中删除常量
- 'char const *str'作为模板参数
- 为什么不;t strlen(.)应为const char*const str,而不是const char*