【发布时间】:2023-04-03 14:51:01
【问题描述】:
我正在用 C++ 编写一个通用矩阵类。我希望能够从二维双精度数组初始化矩阵。因为我使用的是模板,因此在编译时需要知道矩阵大小,我想确保只有给定大小的数组可以传递给构造函数。用代码表示为:
template<unsigned int M, unsigned int N>
class Matrix {
public:
Matrix(double (&values)[M][N]);
}
现在,奇怪的部分来了:正如预期的那样,下面的代码就像一个魅力:
double arr [3][3] = { {1,2,3},
{1,2,3},
{1,2,3} };
Matrix<3,3>* mat3x3p = new Matrix<3,3>(arr);
但是当匿名传递数组时,代码被破坏了:
Matrix<3,3>* mat3x3p = new Matrix<3,3>({ {1,2,3},
{1,2,3},
{1,2,3} });
这同样适用于通过赋值构造。 确切的错误信息是:
no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘double (&)[3][3]’
【问题讨论】:
-
试试
Matrix(double (&values)[][N]); -
对不起,我的错。但是,
Matrix(const double (&values)[M][N]);应该可以工作。
标签: c++ arrays templates constructor multidimensional-array