1

これが私のコードの一部です。コンパイルすると、1:演算子に一致しません= 2:「Matrix」から「Matrix&」への引数1の既知の変換はありませんが、演算子+部分を削除すると、どこで機能しますか問題?!:|

gcc エラー:「z = Matrix::operator+(Matrix&)((* & y))」の「operator=」に一致しません候補は: atrix& Matrix::operator=(Matrix&) からの引数 1 の既知の変換ではありません。 Matrix' から 'Matrix&' へ"

class Matrix {
  //friend list:
  friend istream& operator>>(istream& in, Matrix& m);
  friend ostream& operator<<(ostream& in, Matrix& m);

  int** a;    //2D array pointer
  int R, C;   //num of rows and columns
  static int s1, s2, s3, s4, s5;
 public:
  Matrix();
  Matrix(const Matrix&);
  ~Matrix();
  static void log();

  Matrix operator+ (Matrix &M){
    if( R == M.R && C == M.C ){
        s4++;
        Matrix temp;
        temp.R = R;
        temp.C = C;         temp.a = new int*[R];
        for(int i=0; i<R; i++)
            temp.a[i] = new int[C];

        for(int i=0; i<R; i++)
            for(int j=0; j<C; j++)
                temp.a[i][j] = a[i][j] + M.a[i][j];

        return temp;
    }   
}

  Matrix& operator = (Matrix& M){
s5++;
if(a != NULL)
{
    for(int i=0; i<R; i++)
        delete [] a[i];
    delete a;
    a = NULL;
    R = 0;
    C = 0;
}
R = M.R;
C = M.C;
a = new int*[R];
for(int i=0; i<R; i++)
    a[i] = new int[C];

for(int i=0; i<R; i++)
    for(int j=0; j<C; j++)
        a[i][j] = M.a[i][j];    

return *this;
}   

};

4

1 に答える 1

2
Matrix operator+ (Matrix &M){
Matrix& operator= (Matrix &M){

const Matrix&どちらも同じ問題を共有しています-パラメーターの型は(コピーコンストラクターのように)あるべきです。そうしないと、一時オブジェクトをオペレーターに渡すことができません。

于 2013-03-17T10:05:50.730 に答える