2

このコードでは:

#include <array>
#include <cstdint>

struct K {
    std::array<char, 4> a;
    std::uint8_t b;
};

const K k1 = { {'T', 'e', 's', 't'}, 1 };

class X {
    const K k2 = { {'A', 'b', 'c', 'd'}, 2 };
};

グローバル オブジェクトを問題なく初期化できますk1。ただし、クラス メンバーの既定の初期化子で同じ構文を使用しようとすると、k2コンパイラ エラーが発生します (g++-4.8.2 および g++-5.2.0 からの同様のエラー)。

main.cpp:12:44: error: array must be initialized with a brace-enclosed initializer
     const K k2 = { {'A', 'b', 'c', 'd'}, 2 };
                                            ^
main.cpp:12:44: error: too many initializers for 'std::array<char, 4ul>'

k2その宣言で初期化する正しい方法は何ですか?

4

1 に答える 1

2

追加のブレースが必要なだけです。

class X {
    const K k2 = { {{'A', 'b', 'c', 'd'}}, 2 };
};
于 2015-12-21T21:34:46.887 に答える