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

标签 c++ arrays multidimensional-array

我创建了一个函数来计算 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/

相关文章:

C++ 函数打印数组

java - 在 Java 中调整同名数组的大小

c++ - fstream 初始化为一个类

c++ - 如何让 qGLWidget 在 Visual Studio 中显示

javascript - 如何从数组中获取单个字段

go - 尝试初始化2D slice ,但元素引用更改了 slice 中的所有行

c - 数组到指针衰减并将多维数组传递给函数

swift - 在 Swift 中计算多维数组的维数

c++ - 如果你知道地址,你能访问另一个程序的堆栈/堆吗?

arrays - 来自两个数组的 MATLAB sprintf