如何创建一个接受2D数组的构造函数

时间:2018-08-01 23:11:35

标签: c++ arrays object multidimensional-array constructor

我正在创建自己的矩阵库用于教育目的。 我创建了一个接受

形式的4x4矩阵的构造函数
Matrix(float initMatrix[4][4]){
 //init operation here
}

当通过创建2D数组然后使用该变量初始化该对象来创建对象时,上述构造函数可以很好地工作,例如:

float my_matrix[4][4] = {{...},{...},{...},{...}}; //shortened for brevity
Matrix matrix(my_matrix);

但是,在执行以下操作时无法构建:

Matrix matrix({{...},{...},{...},{...}});

编译器告诉我

> cannot convert initializer list argument to 'float (*)[4]'

所以我添加了另一个看起来像这样的构造函数:

Matrix matrix(float matrix(*)[4]){}

我最终收到以下编译器错误。

error: C++ requires a type specifier for all declarations
    Vytrix(float input(*)[4]){

有人可以向我展示一种设计构造函数的灵活方法,以便我可以以一种干净的方式初始化该类吗?

4 个答案:

答案 0 :(得分:2)

您正在使用C ++,因此可以使用std::array

std::arraya little wonky,且具有初始化功能,因此您需要一组额外的花括号。这是一个工作示例:

#include <array>

class foo
{
public:
    foo(std::array<std::array<int, 2>, 3> arr) { }
};

int main()
{
    foo f({{{1, 2}, {3, 4}, {5, 6}}});
}

答案 1 :(得分:2)

语法为:

Matrix(const float (&m)[4][4]);

答案 2 :(得分:1)

如果要强制标注尺寸,可以接受对数组的const引用,而不是直接传递数组:

struct Matrix {
    Matrix(const float (&initMatrix) [4][4]) {}
};

int main()
{
    Matrix m({{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}});
    return 0;
}

在这里尝试:https://onlinegdb.com/ByzOQTkrQ

这是一个很好的答案:https://stackoverflow.com/a/17569578/2193968

答案 3 :(得分:1)

您可以这样做:

struct Matrix
{
    float initMatrix[4][4];
};

int main()
{
    Matrix m{ { { 1,2,3,4 },{ 5,6,7,8 },{ 9,10,11,12 },{ 13,14,15,16 } } };
    return 0;
}

https://ideone.com/WeZjbY