2011-09-12 11 views
3

私は自分でMatrixクラスを作成しました。しかし、+演算子をオーバーロードすると面白い問題があります。面白いC++演算子のオーバーロードの問題

Matrix Matrix::operator+ (Matrix& operand) 
{ 
    if(row_size == operand.row_size && col_size == operand.col_size) 
    { 
     Matrix temp(row_size, col_size); 
     for(int i = 0; i < col_size; i ++) 
     { 
      for(int j = 0; j < row_size; j ++) 
      { 
       temp[i][j] = data_list[i][j] + operand.data_list[i][j]; 
      } 
     } 

     return temp; 
    } 
    else 
     throw Error::Matrix_error(0); 
} 

私は主な機能上の

matrix + matrix2;

を行うと、プログラムが無限ループに入っているように、それはそう。だから、私はちょうどそれをデバッグし、コードがreturn temp;の部分で停止することを知った。 オペレータの戻り値の型がMatrixなので、なぜこの関数がtempを返すことができないのかわかりません。

さらに、このコードは、RELEASEモード(Visual Studio 2010)でコンパイルすると完全に機能します。しかし、DEBUGモードでコンパイルすると動作しません。

+1

'Matrix'のcopy-ctor(または割り当て)はどのように見えますか? – Nim

+0

「返却時のコード**の停止**」とはどういう意味ですか?それがクラッシュすることを意味しますか? –

+1

行列のスペースを動的に割り当て、行列へのポインタを返そうとします。 – SpeedBirdNine

答えて

0

問題は私がコピーコンストラクタを作成したことでした。コピーコンストラクタで無限ループになったようですが、デバッガはそれをキャッチしませんでした。

+1

'@' - 回答者はあなたが質問されたところのコメントでなければなりません;) –

関連する問題