二维数组的初始化数组

5
如何在C++中初始化二维数组的数组(如下面代码中定义的)?
#include <iostream>
#include <array>

typedef int arr3by6Int[3][6];
typedef arr3by6Int arr3xarr3by6Int[3];

void print3by6(arr3by6Int arr)
{
    for(int i = 0; i < 3; i++)
    {
        for(int j = 0; j < 6; j++)
        {
            std::cout << arr[i][j] << " ";
        }
        std::cout << std::endl;
    }
}
int main(int argc, char const *argv[])
{

    arr3by6Int a = {
        {1,2,3,4,5,6},
        {0,0,0,0,0,0},
        {2,2,2,2,2,2}
    };

    arr3by6Int b = {
        {2,2,3,4,5,6},
        {0,0,0,0,0,0},
        {2,2,2,2,2,2}
    };

    arr3by6Int c = {
        {3,2,3,4,5,6},
        {0,0,0,0,0,0},
        {2,2,2,2,2,2}
    };

    arr3xarr3by6Int d = { a, b, c };

    for(int i = 0; i < 3; i++)
    {
        print3by6(d[i]);
    }
    return 0;
}

我收到了以下错误信息: $ g++ -std=c++11 arrays.cpp -o arrays arrays.cpp: 在函数‘int main(int, const char**)’中: arrays.cpp:39:32: 错误:必须使用括号包围的初始化器初始化数组 arrays.cpp:39:32: 错误:必须使用括号包围的初始化器初始化数组 arrays.cpp:39:32: 错误:必须使用括号包围的初始化器初始化数组

1
错误信息已经说明了一切。 - user1095108
2
C风格的数组不能直接从其他数组初始化,也不能作为函数参数按值传递或从函数返回。 - Kerrek SB
1
重写它,不要使用typedef,可能会更明显它的错误。 - Jonathan Potter
我觉得使用typedef运算符应该要求先取得许可证。它可能会非常迅速地使数据结构变得复杂和难以理解。 - PP.
哦,我现在明白了。谢谢Jonathan Potter。 - user2818508
1个回答

6

你的代码中有 #include <array>,因此你应该使用它。将你的类型更改为使用 std::array<>

typedef std::array<std::array<int, 6>, 3> arr3by6Int;
typedef std::array<arr3by6Int, 3> arr3xarr3by6Int;

然后,更新你的初始化列表以匹配:

    arr3by6Int a = {
        std::array<int, 6>{1,2,3,4,5,6},
        std::array<int, 6>{0,0,0,0,0,0},
        std::array<int, 6>{2,2,2,2,2,2}
    };

    arr3by6Int b = {
        std::array<int, 6>{2,2,3,4,5,6},
        std::array<int, 6>{0,0,0,0,0,0},
        std::array<int, 6>{2,2,2,2,2,2}
    };

    arr3by6Int c = {
        std::array<int, 6>{3,2,3,4,5,6},
        std::array<int, 6>{0,0,0,0,0,0},
        std::array<int, 6>{2,2,2,2,2,2}
    };

在大多数情况下,“C风格”数组类型的对象在表达式中使用时会降级为指向数组第一个元素的指针。您初始化“d”的方法尝试使用指针值来初始化3个矩阵,这是行不通的。 std::array是一个类,所以它不会以那种方式降级。

谢谢,这正是我正在寻找的。 - user2818508

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