2016-05-31 67 views
-2

我有一个对象矩阵,我重载了一元减运算符,我无法设法使我的程序工作。如果我将返回类型作为参考,它不允许我返回在函数内创建的对象,如果我将返回类型设置为Matrix,则会出现分段错误。一元减运算符重载C++分段错误

在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; 
} 

我试过的许多排列(添加常量,通过参考加入)和似乎没有任何工作。我该如何解决 ?

+0

的实施和使用,将有助于 – imreal

+0

任何使用减号来的触发分段错误,它甚至没有进入功能(试过cout的东西)。 我会写它无论 –

+0

你必须把真实的代码,该方法甚至没有参数,如果它没有进入功能把调用网站。 – imreal

回答

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