2010-10-07 55 views
0

我有這個奇怪的問題:當我的計劃達成這個方法:有問題的矢量返回值 - 沒有真正更新?

//Returns the transpose matrix of this one 
RegMatrix RegMatrix::transpose() const{ 
    RegMatrix result(numCol,numRow); 
    int i,j; 
    for(i=0;i<numRow;++i) 
     for(j=0;j<numCol;++j){ 
      result._matrix[j][i] = _matrix[i][j]; 
     } 

     return result; 
} 

突然崩潰......

,當我和我的VS調試運行它,它看起來只是所有優良,新的矩陣填充了相關的值,直到return result;從某個神祕的原因返回空矩陣向量。

我在哪裏出錯?


這裏是我的拷貝構造函數的實現:

//CCtor of RegMatrix      
RegMatrix::RegMatrix(const RegMatrix &other): numRow(other.getRow()), numCol(other.getCol()){ 

    //Create 
    _matrix = vector<vector<MyDouble> >(other.getRow()); 
    int i,j; 
    for(i=0; i < numRow; i++) 
     _matrix[i] = vector<MyDouble>(other.getCol()); 

    //Copy Matrix 
    for(i=0;i<numRow; ++i){ 
     for(j=0;j<numCol; ++j){ 
      _matrix[i][j] = other._matrix[i][j]; 
     } 
    } 
} 

我的賦值操作符的實現:

//RegMatrix = RegMatrix 
RegMatrix& RegMatrix::operator=(const RegMatrix rhs){ 
    assert(numRow == rhs.getRow() && numCol == rhs.getCol()); 
    if(*this != rhs){ 
     int i,j; 
     for(i=0;i<numRow;++i) 
      for(j=0;j<numCol;++j){ 
       _matrix[i][j] = rhs._matrix[i][j]; 
      } 
    } 

    return *this; 
} 
+0

你的副本構造函數是什麼樣的? – 2010-10-07 22:48:32

+0

你的拷貝構造函數做了很多和不必要的拷貝(見PigBen的答案),但最終它應該工作。我能想象的代碼是這樣'RegMatrix換位= someMatrix.transpose();'所以接下來的犯罪嫌疑人是你的賦值運算符 – 2010-10-07 23:09:22

回答

0

假設MyDouble有一個正確的拷貝構造函數,你應該能夠在您的拷貝構造函數降低到只此:

RegMatrix::RegMatrix(const RegMatrix &other):numRow(other.getRow()), numCol(other.getCol()), 
    _matrix(other._matrix) 
{ } 

看看,讓你。

編輯: 如果列和行不相等,則您的賦值運算符可能會成爲問題。你在那個例子中拋出一個斷言,所以程序將會中止。那是你要的嗎?你不是寧願賦值改變列和行來匹配新的值嗎?如果是這樣,你可以這樣做:

RegMatrix & RegMatrix::operator=(const RegMatrix & rhs) { 
    if(this == &rhs) 
     return *this; 
    numRow = rhs.getRow(); 
    numCol = rhs.getCol(); 
    _matrix = rhs._matrix; 
    return *this; 
} 
+0

它導致我一些更神祕的問題..我目前的CCtor有什麼問題? – limlim 2010-10-07 23:14:26

+0

可能沒有什麼,它只是包含不必要的代碼,所以它更容易出錯。我只是想,如果你讓你的構造更簡單,你可以肯定這不是問題。看到亞歷克斯的評論,我們現在需要看到你的任務運營商。如果你沒有,那麼我們需要看你的課堂體。 – 2010-10-07 23:19:42

+0

這是cc導致什麼樣的「更神祕的問題」? – 2010-10-07 23:32:37

0

您是按值返回矩陣。涉及拷貝構造函數。你的拷貝構造函數是如何定義的?

+0

RegMatrix的// CCtor \t \t \t \t RegMatrix :: RegMatrix(常量RegMatrix及其他):numRow行(其它.getRow()),numCol(other.getCol()){ \t //創建 \t _matrix = vector >(other.getRow()); \t int i,j; (i = 0; i (other.getCol()); \t //複製矩陣 \t爲(I = 0;我 limlim 2010-10-07 22:50:37

+0

把這個問題放到你的問題中,請格式正確。 – 2010-10-07 22:52:03

+0

(我已經添加到我的問題,所以它會看起來更好) – limlim 2010-10-07 22:52:36