2017-03-25 18 views
0

私は、コンストラクタを使って動的にそれらを割り当てるマトリックスと、値を設定するためのistream演算子のためにいくつかのオーバーロード演算子関数を設定しようとしています。私は2つの行列(ランタイムエラー)を乗算しようとすると問題が発生しました。演算子のオーバーロード:マルチプル化行列

ご協力いただければ幸いです。 ps:私はテンプレートに精通していません。ここで

は私の*演算子関数です:

matrixType operator*(matrixType m) 
{ 
    if(Rows==m.Cols && Cols==m.Rows) 
    { 
     matrixType m3(Rows,m.Cols); 
     for(int i=0; i<Rows;i++) 
     { 
      for(int j=0; j<Cols; j++) 
      { 
       { 
        for(int g=0; g<Cols;g++) 
         m3.matrix[i][j]+=matrix[i][g] * m.matrix[g][j]; 
       } 
      } 
     } 
     return m3; 
    } 
} 

そして、ここでは私のコピー演算子関数です:

matrixType& operator=(matrixType& m) 
{ 
    for (int i =0; i<Rows; i++) 
    { 
     for (int j=0; j<Cols; j++) 
       matrix[i][j]=m.matrix[i][j]; 
    } 

    return *this; 
} 
+1

エラーの詳細は言及していませんが、最も一般的な問題は、動的にメンバーを割り当てたときに「3のルール」(google it)に従わないことです。 'std :: vector'を使う方が良いでしょう。それは"ゼロのルール "に従うことができるからです。 – molbdnilo

+0

こんにちは、覚えて、StackOverflowへようこそ。ヘルプページ、特に[ここではどのトピックについて聞かせていただけますか?](http://stackoverflow.com/help/on-topic)と[質問しないでください。」](http://stackoverflow.com/help/dont-ask)。さらに重要なことは、[Stack Overflow question checklist](http://meta.stackexchange.com/q/156810/204922)をお読みください。また、[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)についても知りたいことがあります。 –

答えて

0

私はあなたには、いくつかのランタイムエラーを投稿する場合は、コードを実行したときに、それが良いことだと思います。とにかく、私はあなたの乗算演算子の機能に問題が見つかりました:あなたは立方メートルを返すとき、それは別のスコープで定義されている

、したがってそれは、定義されていない、どのようにかの範囲内でreturn立方メートル文を入れについて:

matrixType operator*(matrixType m) 
{ 
    if(Rows==m.Cols && Cols==m.Rows) 
    { 
     matrixType m3(Rows,m.Cols); 
     for(int i=0; i<Rows;i++) 
     { 
      for(int j=0; j<Cols; j++){ 
        {for(int g=0; g<Cols;g++) 
        m3.matrix[i][j]+=matrix[i][g] * m.matrix[g][j];} 
     } 
     return m3; 
    } 
     // Throw some error if your assertion is not satisfied, perhaps 
    } 
} 
0

お客様のjループに間違ったColsが使用されています。

for (for(int j=0; j<m.Cols; j++) 

どこiを見て、j、およびg変数が限界値は、3つのループのためのものであるかを確認する添字に使用されます:あなたはそこにm.Colsをしたいです。

関連する問題