2016-05-31 32 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; 
}