我使用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_;
};
虽然实施是:
//CONSTRUCTOR
Matrix::Matrix(int nrows, int ncols)
{
nc_ = ncols;
nr_ = nrows;
/*creates rows*/
for (int i = 0; i < nrows; i++)
{
vector<double> row;
Matrix_.push_back(row);
}
/*Fills matrix with zeroes*/
for (int i = 0; i < nr_; i++)
{
for (int j = 0; j < nc_; j++)
{
Matrix_[i].push_back(0);
}
}
}
/*method returning i,j element of the matrix (I overloaded () to do the same)*/
double Matrix::elem(int i, int j)
{
return Matrix_[i][j];
}
/*operator () overloading*/
double Matrix::operator()(int i, int j)
{
return Matrix_[i][j];
}
最后,在主程序中我有:
Matrix m1(rows, cols);
for (int i=0; i<rows; i++)
{
for (int j=0; j<cols; j++)
{
m1(i,j) = i*j;
/*OR, using the other method*/
m1.elem(i,j) = i*j;
}
}
问题是我总是返回错误:
matrix.cpp:55:27: error: lvalue required as left operand of assignment
m1.elem(i,j) = i*j;
无论我使用方法.elem()还是operator()。 所以,我想问题是我没有以正确的方式访问元素来改变他们的价值观,但我不明白为什么。 任何建议都将不胜感激,谢谢!
答案 0 :(得分:1)
为了能够修改矩阵元素,您需要返回对它的引用:
double& Matrix::elem(int i, int j) {
return Matrix_[i][j];
}
和
double& Matrix::operator()(int i, int j) {
return Matrix_[i][j];
}
您还可以为const
矩阵添加这些内容:
double Matrix::elem(int i, int j) const {
return Matrix_[i][j];
}
和
double Matrix::operator()(int i, int j) const {
return Matrix_[i][j];
}