2016-03-22 20 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のコンストラクタの1つから初期化される可能性があります。その時点で、デフォルトの初期化子は使用されません。そのため、型を明示的に指定する必要があります。宣言はイニシャライザなしで有効でなければなりません。 [?メンバ変数に初期化文字列から配列のサイズを推定することができない理由は何ですか]

class Example { 
    auto i = 4; 
};