一元减运算符重载C ++分段错误

时间:2016-05-31 23:34:25

标签: c++ operator-overloading

我有一个对象矩阵,我重载了一元减号运算符,我无法让我的程序工作。如果我把返回类型作为引用,它不允许我返回我在函数内创建的对象,如果我将返回类型作为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,通过引用添加),似乎没有任何效果。我该如何解决 ?

1 个答案:

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