2016-03-22 26 views
0

如何在C++ 11中默認初始化成員數組?看來我必須提供一個界限。對於數組成員C++的類默認初始值設定程序11

class Example { 
    const char* num2letter[10]{" ", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; 
}; 

編譯好。但是,如果我忽略綁定,然後我得到一個編譯器錯誤:

error: too many initializers for 'const char* [0]' const char* num2letter[]{" ", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};

爲什麼編譯器不能推斷綁定爲通常它可以爲本地數組定義使用集合初始化?

+0

的重複(HTTP ://stackoverflow.com/questions/29593207/what-is-the-reason-for-not-being-able-to-deduce-array-size-from-initializer-stri) –

回答

1

默認成員初始值設定項就是 - 默認值。它總是允許構造函數提供不同的值的可能性。 num2letter可能會從Example的構造函數之一初始化,此時甚至不會使用默認的初始化函數...因此該類型必須明確提供。聲明必須在我們沒有初始化程序的情況下有效。

這是你不能這樣做同樣的原因:?什麼是不能夠在成員變量初始化從字符串數組推斷尺寸的原因]

class Example { 
    auto i = 4; 
};