在c++中初始化2D数组类并将其传递给函数



我创建了一个函数来计算3x3行列式。这是它的原型:

double threeDet(array<array<double, 3>, 3> det);

我使用了类数组,因为它看起来比传统数组更安全。我想测试这个函数,所以我把它命名为:

threeDet({ {2, -3, 1}, {2, 0, -1}, {1, 4, 5} });

但是,它会抛出"太多初始化项"的错误

当我将函数更改为

时也发生了这种情况:
double threeDet(double det[][3]);

首先初始化数组会引发相同的错误:

array<array<double, 3>, 3> det({ {2, -3, 1}, {2, 0, -1}, {1, 4, 5} });
threeDet(det);

唯一有效的方法是将函数更改为第二个版本,并单独初始化数组:

double det[3][3] = { {2, -3, 1}, {2, 0, -1}, {1, 4, 5} };
threeDet(det);

我想知道我错过了什么,如果有一种方法来初始化,我错过了。

在熟悉带括号的初始化列表及其工作方式之前,有一个很好的经验法则可以遵循:当涉及到std::array时,将大括号括起来:

threeDet({{ {{2, -3, 1}}, {{2, 0, -1}}, {{1, 4, 5}} }});

std::array是一个聚合对象,它包含一个类成员:数组本身。所以:

  • 外套大括号构造std::array.

  • 内部大括号集合构造其类成员数组。

现在,一旦传递了这一部分,就得到了一对大括号,用于构造数组中的每个值。好吧,每个这样的值也是一个std::array,所以你需要在另一对大括号中初始化它的数组类成员。

最新更新