我有一个对象矩阵,我重载了一元减号运算符,我无法让我的程序工作。如果我把返回类型作为引用,它不允许我返回我在函数内创建的对象,如果我将返回类型作为Matrix,那么我会得到分段错误。
在H文件中:
Matrix operator - () const;
在cpp文件中:
Matrix Matrix::operator - () const
{
if (isValid==false)//just a validity check
return *this;
Matrix mat(*this);//copy ctor
for (int i=0;i<row;i++)
for (int j=0;j<col;j++)
mat.matrix[i][j]=-matrix[i][j];
return mat;
}
我尝试了很多排列(添加const,通过引用添加),似乎没有任何效果。我该如何解决 ?
答案 0 :(得分:1)
以下内容无任何分段错误。您应该通过删除任何不必要的内容来最小化代码,然后逐渐将其转换为下面的代码,并查看您的分段错误消失的阶段。
#include <iostream>
#include <vector>
using namespace std;
class Matrix {
public:
Matrix() : isValid(true), row(0), col(0) {}
Matrix(int r, int c, int val);
Matrix(const Matrix&);
Matrix operator - () const;
private:
bool isValid;
int row, col;
vector<vector<int> > matrix;
};
Matrix::Matrix(int r, int c, int val) : isValid(true), row(r), col(c) {
matrix.resize(r);
for (int i=0; i<r; i++)
matrix[i].resize(c, val);
}
Matrix::Matrix(const Matrix& m) : isValid(true), row(m.row), col(m.col), matrix(m.matrix) {}
Matrix Matrix::operator - () const
{
if (isValid==false)//just a validity check
return *this;
Matrix mat(*this);//copy ctor
for (int i=0;i<row;i++)
for (int j=0;j<col;j++)
mat.matrix[i][j]=-matrix[i][j];
return mat;
}
main() {
int r=10, c=5;
Matrix m(r, c, 1);
Matrix m1;
m1 = -m;
}