我有一个名为Matrix
的C ++类,它有一个行和列属性:
class Matrix
{
public:
int rows, cols;
float elements[36];
// some methods, including constructor
}
我还有一个单独的函数,它应该将两个Matrix
个对象的元素添加到一起并返回第三个Matrix
。代码是:
Matrix MatAdd(const Matrix& inMat1, const Matrix& inMat2)
{
float elements[inMat1.rows*inMat2.cols]; // returns error
// other code ...
}
我得到的实际错误如下(我在VS 2013上):
error C2057: expected constant expression
我已尝试将inMat1.rows
投射到const int
,但我仍然遇到同样的错误。我一定是误解了一些核心C ++概念,但我还没能通过在线搜索找到任何帮助。
谢谢, R上。
答案 0 :(得分:0)
问题是您无法定义可变长度数组。需要在编译时知道长度。
解决方法是动态分配数组。
float* elements = new float[inMat1.rows*inMat2.cols];
您还必须更改elements
课程的Matrix
成员。
答案 1 :(得分:0)
数组的大小应该是常量:
int a1[10]; //ok
int a2[SIZE]; //ok if the value of SIZE is constant/ computable in compile time
您可以使用向量来避免此错误。您还可以根据需要动态分配内存。