2017-09-03 1 views
1
私は2つの目的のために*演算子をオーバーロードしたい

複数のオペランド、オーバーロード*演算子

まず目的:

m4 * 3.5; //m4 is a matrix object 

この機能により上記の作品、ここに実装

と全く問題なし
Matrix operator *(const double n) 

しかし、私は

3.5 * m4; 
01つまり、逆にしようとすると、

一致する機能がないというエラーが表示されます。だから私は、この特定のケースのために、この関数を作っ

Matrix operator *(const double n, Matrix &obj) 
{ 
    for(unsigned int i = 0; i < rows; i++) 
    { 
     for(unsigned int j = 0; j < cols; j++) 
     { 
      obj[i][j] = obj[i][j] * n; 
     } 

    } 

    return *this; 
} 

は今、私はエラーを取得する:

error: ‘Matrix Matrix::operator*(double, Matrix&)’ must take either zero or one argument Matrix operator *(const double n, Matrix &obj);

error: no match for ‘operator*’ (operand types are ‘double’ and ‘Matrix’)
cout << 3.5 * m4 << endl;

私は、オペランドの問題を克服する方法がわかりません!

残念ながら、BLASやEigenなどは使用できません。この課題は、私たちにこの行列のナンセンスを闘わせることを要求する。

+0

編集しないでください文法や間違った大文字を訂正するだけの私の投稿。私は英語のレッスンではなく、プログラミングのヘルプのためにここにいます。これらのエラーは、誰かが私のコードを理解する能力を妨げることはありませんでした! – Jaydie

答えて

3

Matrix operator *(const double n, Matrix &obj)のメンバーはMatrixです。つまり、thisの暗黙的な最初のパラメータを持っています。あなたがしなければならないことは、メンバー以外の機能にすることです。

はまた、オペランドを変更するべきではありませんので、あなたは、const参照でMatrixを渡す必要があることに注意してください:

Matrix operator *(const double n, const Matrix &obj); 

同じことがあなたの最初の過負荷のために言うことができる、constメンバ関数のいずれかである必要があり

Matrix operator *(const double n) const; 

かも非メンバー:

Matrix operator *(const Matrix& mat, const double n); 
+0

私はそれを非メンバ関数にすると、 "演算子*(double、Matrix const&) 'への参照が未定義です。" "、私はMatrixクラスを宣言しましたが、それは役に立たないようです。 – Jaydie

+0

@Jaydieあなたは他の間違いをしています。 Soは、未定義の参照にたくさんのQ/Asを持っています。 – juanchopanza

関連する問題