std::array<std::pair<int, int>, 2> ids = { { 0, 1 }, { 1, 2 } };
VS2013 エラー:
error C2440: 'initializing' : 'int' から 'std::pair' に変換できません コンストラクターがソース型を取得できないか、コンストラクターのオーバーロードの解決があいまいです '
私は何を間違っていますか?
std::array<std::pair<int, int>, 2> ids = { { 0, 1 }, { 1, 2 } };
VS2013 エラー:
error C2440: 'initializing' : 'int' から 'std::pair' に変換できません コンストラクターがソース型を取得できないか、コンストラクターのオーバーロードの解決があいまいです '
私は何を間違っていますか?
もう 1 組の中括弧を追加します。
std::array<std::pair<int, int>, 2> ids = { { { 0, 1 }, { 1, 2 } } };
std::array<T, N>
type のメンバーを含む集約クラスですT[N]
。通常、単純なT[N]
配列と同じ方法で初期化できますが、非集合要素型を扱っている場合は、より明示的にする必要がある場合があります。
std::array
集合体です。std::array
データ メンバーは 1 つだけです。特殊化の指定された型の配列です。C++ 標準による。(8.5.1 集計)
2 8.5.4 で指定されているように、集合体が初期化子リストによって初期化される場合、初期化子リストの要素は、添え字またはメンバーの昇順で、集合体のメンバーの初期化子として取得されます。
それでこのレコード
std::array<std::pair<int, int>, 2> ids = { { 0, 1 }, { 1, 2 } };
std::array にデータメンバーがある場合よりも多くの初期化子があります。
のデータ メンバーはstd::array
集合体です。イニシャライザリストを提供する必要があります。
したがって、レコードは次のようになります
std::array<std::pair<int, int>, 2> ids = { { { 0, 1 }, { 1, 2 } } };
より明確になるため、次の方法で初期化を想像できます
std::array<std::pair<int, int>, 2> ids = { /* an initializer for data member of the array */ };
データ メンバーは集計であるため、次のように記述する必要があります。
std::array<std::pair<int, int>, 2> ids = { { /* initializers for the aggregate data member*/ } };
そしてついに
std::array<std::pair<int, int>, 2> ids = { { { 0, 1 }, { 1, 2 } } };