I have the following code :
typedef signed char Char;
static const struct MyStruct
{
const Char* str;
// Other fields
}
myList[] =
{
{"none", /* Other fields */},
{"main", /* Other fields */},
}
But I have compilation errors :
Cannot initialize a member subobject of type 'const Char *' (aka 'const signed char *') with an lvalue of type 'const char [X]
X is string length
It's OK when I replace Char
by char
, but how can I use signed char
?
"none"
, for example is a const char[5]
type. Under certain circumstances, this can decay to a const char*
.
Irrespective as to whether char
is signed
or unsigned
on your platform, char
, signed char
, and unsigned char
are always distinct types.
C++ does not allow direct decay of a const char[N]
type to anything other than a const char*
(or a pointer to a typedef
of const char*
), so in your case it is required to issue a diagnostic.
In C++ you have so many other alternatives: std::string
being the obvious choice in your case.
To examine the type of char
you have, use
std::numeric_limits<char>::is_signed
from <limits>
.
but how can I use signed char ?
By using an array of signed char
instead of a string literal:
signed char none[] = {'n','o','n','e','\0'};
...
myList[] =
{
{none, /* Other fields */},
...
}
Note that char
(the type of the character literal) may be unsigned and if the value is not representable by signed char
, then the resulting value will be implementation defined.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With