2017-10-11 89 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,然後結果值將被實現定義。

相關問題