C++ 无法写入矩阵<;向量<;向量<;双倍>&燃气轮机;对象

C++ 无法写入矩阵<;向量<;向量<;双倍>&燃气轮机;对象,c++,matrix,stl,C++,Matrix,Stl,我使用vector 结构。创建时,矩阵中填充了零(可能不是最好的方法,我正计划更改它)。 类的标题如下所示: class Matrix{ public: /*Basic constructor, accepts matrix dimensions Matrix(int nr, int nc); /*return element i,j*/ double elem(int i, int j); /*operator () overloading - sa

我使用vector 结构。创建时,矩阵中填充了零(可能不是最好的方法,我正计划更改它)。 类的标题如下所示:

class Matrix{
public:
    /*Basic constructor, accepts matrix dimensions
    Matrix(int nr, int nc);

    /*return element i,j*/
    double elem(int i, int j);

    /*operator () overloading - same thing as previous method*/
    double operator()(int i, int j);

private:
    vector<vector<double> > Matrix_;
    int nr_, nc_;
};
无论我使用的是方法.elem()还是运算符()。 所以,我想问题是我没有以正确的方式访问元素来改变它们的值,但我不明白为什么。
如有任何建议,将不胜感激,谢谢

为了能够修改矩阵元素,您需要返回对它的引用:

double& Matrix::elem(int i, int j) {
    return Matrix_[i][j];
}
以及:

您还可以为
const
矩阵添加这些:

double Matrix::elem(int i, int j) const {
    return Matrix_[i][j];
}
以及:


您需要返回一个引用
double&Matrix::operator()(inti,intj)
。同样对于
Matrix::elem
[OT]您的构造函数可以简化为:
Matrix::Matrix(int nrows,int ncols):Matrix(nrows,std::vector(ncols,0.)、nr(nrows)、nc(ncols){}
[OT]:
nr
nc
是不需要的,
Matrix.size()
Matrix[0].size>具有相同的信息。(除非使用唯一的
std::vector
展平数据并手动计算索引)
matrix.cpp:55:27: error: lvalue required as left operand of assignment
m1.elem(i,j) = i*j;
double& Matrix::elem(int i, int j) {
    return Matrix_[i][j];
}
double& Matrix::operator()(int i, int j) {
    return Matrix_[i][j];
}
double Matrix::elem(int i, int j) const {
    return Matrix_[i][j];
}
double Matrix::operator()(int i, int j) const {
    return Matrix_[i][j];
}