2016-05-30 24 views
2

私は多次元配列を宣言しようとすると:多次元配列:あまりにも多くの初期化子

array<array<int, 7>, 5> arrayOne = { 
{1, 5, 8, 0, 0, 0, 0}, 
{2, 3, 8, 7, 7, 0, 0}, 
{3, 4, 8, 2, 9, 0, 0}, 
{4, 8, 7, 1, 4, 0, 0}, 
{5, 7, 6, 8, 3, 0, 0} }; 

私が手:

|10|error: too many initializers for 'std::array<std::array<int, 7u>, 5u>' 

しかし、私は標準と同じことをしたときに[ ]配列:

int arrayTwo[5][7]= { 
{1, 5, 8, 0, 0, 0, 0}, 
{2, 3, 8, 7, 7, 0, 0}, 
{3, 4, 8, 2, 9, 0, 0}, 
{4, 8, 7, 1, 4, 0, 0}, 
{5, 7, 6, 8, 3, 0, 0} }; 

エラーはありません。私はWindows 7 x64でmingw g ++を使用しています。私はC + +とstackoverflowに新しいです、あなたの忍耐は高く評価されます。

+0

を参照してください。あなたは、 '' STDを推定するために、 '{}余分な括弧を使いたかったです。 :initializer_list'? –

+0

@πάνταῥεῖ私は余分なブレースを使用していたとは思わなかったが、正確にどこにあるのか明確にすることはできますか? – Windows7

+0

_ "正確にどこにあるのかわかりますか?" –

答えて

5

初期設定の場合std::arrayは生の配列とは少し異なります。 std::arrayaggregate initializationを参照する必要があります。あなたは初期値がstd::initializer_listに推定することができることを、余分なかっこを配置する必要があり

#include <array> 

int main() 
{ 
    std::array<std::array<int, 7>, 5> arrayOne = { 
     { 
    //^
      {1, 5, 8, 0, 0, 0, 0}, 
      {2, 3, 8, 7, 7, 0, 0}, 
      {3, 4, 8, 2, 9, 0, 0}, 
      {4, 8, 7, 1, 4, 0, 0}, 
      {5, 7, 6, 8, 3, 0, 0} 
     } 
    //^
    };  
} 

Live Demo