使用object属性作为数组索引返回错误(C ++)

时间:2014-04-29 03:43:26

标签: c++ class const

我有一个名为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上。

2 个答案:

答案 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

您可以使用向量来避免此错误。您还可以根据需要动态分配内存。