多维数组使用数组类错误:初始值太多。

3

当我尝试使用以下方式声明多维数组时:

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} };

I get:

|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的新手,非常感谢您的耐心。


你想使用额外的大括号 {} 来推导 std::initializer_list 吗? - πάντα ῥεῖ
@πάνταῥεῖ,我认为我没有使用任何额外的大括号,您能否澄清它们确切的位置? - Windows7
你能澄清一下他们具体在哪里吗?我已经在我的回答中解释了。 - πάντα ῥεῖ
1个回答

7

对于初始化,std::array和原始数组略有不同。 std::array 需要使用聚合初始化

你需要添加额外的大括号,以便初始化值可以被推导为一个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} 
        }
     // ^
    };    
}

请参见实时演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接