2012-11-27 23 views
0

當我嘗試使用此行的main.cpp:在C++運算符重載是給我一個錯誤

m3.array = m1.array+m2.array; 

,其中M3,M1及M2是一類型矩陣的所有對象,有一個int [3] [3] array - 我不斷收到一個錯誤,該錯誤處理的是類型int [3] [3]和int [3] [3]與opperand'+'不兼容的賦值。我不知道確切的錯誤,因爲我不在計算機上編譯程序。

這裏的matrix.cpp我:

#include <iostream> 
#include <string> 
#include "matrix.h" 

using namespace std; 

Matrix::Matrix() 
{ 
    m1.array = 0; 
} 

istream& opeator >>(istream& inp, Matrix& m1) 
{ 
     int i, j; 

     for (i = 0; i < 3;i++) 
     { 
      for (j=0; j < 3;j++) 
      { 
       inp >> m1.array[i][j]; 
      } 
     } 
     return inp; 
} 
ostream& operator <<(istream& outp, Matrix& m1) 
{ 
     int i, j; 
     for (i = 0;i<3;i++) 
     { 
      for (j = 0;j<3;j++) 
      { 
       out<<m1.array[i][j]<<" "<<endl; 
      } 
     } 
     return outp; 
} 

Matrix operator + (const Matrix& m1, const Matrix& m2) 
{ 
     Matrix answer; 
     int i,j; 
     for (i = 0;i<3;i++) 
     { 
      for (j = 0;j<3;j++) 
      { 
       answer.array[i][j] = m1.array[i][j] + m2.array[i][j]; 
      } 
     } 
     return answer; 
} 

Matrix operator - (const Matrix& m1, const Matrix& m2) 
{ 
     Matrix answer; 
     int i, j; 
     for (i = 0;i<3;i++) 
     { 
      for (j = 0;j<3;j++) 
      { 
       answer.array[i][j] = m1.array[i][j] - m2.array[i][j]; 
      } 
     } 
     return answer; 
} 

Matrix operator * (const Matrix& m1, const matrix& m2) 
{ 
     Matrix answer; 
     int i, j, k; 
     for (i = 0;i<3;i++) 
     { 
      for (j = 0; j<3;j++) 
      { 
       for (k = 0; k<3;k++) 
       { 
        answer.array[i][j] = m1.array[i][k] + m2.array[k][j]; 
       } 
      } 
     } 
     return answer; 
} 

和matrix.h:

#ifndef MATRIX_H 
#define MATRIX_H 

using namespace std; 

class Matrix 
{ 
     public: 
      Matrix(); 
      friend istream& operator >>(istream&, Matrix&); 
      friend ostream& operator <<(ostream&, const Matrix&); 
      friend Matrix& operator +(const Matrix&, const Matrix&); 
      friend Matrix& operator -(const Matrix&, const Matrix&); 
      friend Matrix& operator *(const Matrix&, const Matrix&); 
      int array[3][3]; 

}; 




#endif 
+0

爲什麼要添加'array'字段而不是實際的'Matrix'對象? –

+2

適當的操作符重載應該看起來像'm1 = m2 + m3 – Chad

+1

該行的意圖是什麼m1.array = 0;它編譯? – neagoegab

回答

3
Matrix operator + (const Matrix& m1, const Matrix& m2) 

這告訴計算機如何添加兩個Matrix對象,做得很好。

m3.array = m1.array+m2.array; 

m1m2Matrix對象,但m1.array不是。 是一個int[3][3]對象。幸運的是,修復非常簡單:

m3 = m1 + m2; 
1

成員arrayint[3][3]類型。您正試圖添加這兩個在C++中沒有意義的多維數組。

我假設你真正想要的是:

m3 = m1 + m2; 

這將打電話給你的重載運算符。

還有一點也是可疑的是你的朋友聲明和你的實際定義不匹配。返回類型是不同的。