2017-09-03 3 views
1

ich den Operator * für zwei Zwecke zu überlasten will:Mehrere Operanden für überladenen Operator *

Erstes Ziel:

m4 * 3.5; //m4 is a matrix object 

Die oben genannte Arbeiten mit dieser Funktion absolut kein Problem mit der Umsetzung hier

Matrix operator *(const double n) 

Allerdings, wenn ich versuche, das Gegenteil, dh

3.5 * m4; 

Ich bekomme eine Fehlermeldung, dass es keine passenden Funktionen gibt. Also habe ich diese Funktion für diesen speziellen Fall

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; 
} 

Nun erhalte ich die Fehlermeldung:

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;

Ich bin nicht sicher, wie das Problem der Operanden zu überwinden!

Leider kann ich BLAS, Eigen oder ähnliches nicht verwenden. Die Aufgabe erfordert, dass wir uns durch diesen Matrix-Unsinn kämpfen.

+0

Bitte nicht bearbeiten mein Beitrag nur um meine Grammatik und falsche Großschreibung zu korrigieren. Ich bin hier um Hilfe zu programmieren, keine Englischstunde. Diese Fehler haben niemanden daran gehindert, meinen Code zu verstehen! – Jaydie

Antwort

3

Sie haben Matrix operator *(const double n, Matrix &obj) ein Mitglied von Matrix gemacht, was bedeutet, dass es einen impliziten ersten Parameter für this hat. Was Sie tun müssen, ist, es zu einer Nichtmitgliedsfunktion zu machen.

Beachten Sie auch, dass es nicht die Operanden ändern sollten, so sollten Sie die Matrix durch const einen Verweis:

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

Das gleiche gilt für Ihre erste Überlastung gesagt werden, die entweder eine konstante Elementfunktion sein sollte

Matrix operator *(const double n) const; 

oder auch ein nicht Mitglied:

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

Wenn ich es zu einer Nichtmitgliedsfunktion mache, gibt es mir diesen Fehler: "undefinierter Verweis auf' operator * (double, Matrix const &) '", ich habe auch die Matrix-Klasse deklariert, aber das schien nicht zu helfen. – Jaydie

+0

@Jaydie Du machst einen anderen Fehler. SO hat viele Q/As auf undefinierten Referenzen. – juanchopanza

Verwandte Themen