我创建了一个函数来计算 3x3 行列式。这是它的原型(prototype):
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,因此您需要放入另一对大括号来初始化其数组类成员。
关于c++ - 在C++中初始化2D数组类并将其传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74986285/