我正在创建自己的矩阵库用于教育目的。 我创建了一个接受
形式的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]){
有人可以向我展示一种设计构造函数的灵活方法,以便我可以以一种干净的方式初始化该类吗?
答案 0 :(得分:2)
您正在使用C ++,因此可以使用std::array
!
std::array
是a 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;
}
答案 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;
}