Mehrdeutige Überladung von << Operator für ostream
Der Fehler trat beim Versuch auf, den <<-Operator zu überladen. Der Operator für eine Matrix-Klasse ergibt sich aus der Anforderung, dass die Operatorfunktion genau ein Argument annehmen muss. In diesem Fall ist der Fehler wahrscheinlich auf den folgenden Code zurückzuführen:
std::ostream& Matrix::operator <<(std::ostream& stream, const Matrix& matrix) { [...] }
Da der Operator<< Wenn die Funktion als Mitgliedsfunktion der Matrix-Klasse definiert ist, akzeptiert sie implizit das Matrix-Objekt als Argument. Daher benötigt die Funktion tatsächlich zwei Argumente: das ostream-Objekt und das Matrix-Objekt.
Um dieses Problem zu beheben, haben Sie zwei Möglichkeiten:
Verwenden Sie eine Friend-Funktion: Eine Friend-Funktion ist kein Mitglied der Klasse, hat aber Zugriff auf ihre privaten und geschützten Mitglieder. Durch die Definition des Operators << Wenn Sie als Friend-Funktion fungieren, können Sie das implizite Matrix-Objektargument vermeiden.
friend std::ostream& operator<< (std::ostream& stream, const Matrix& matrix) { [...] }
Übergeben Sie das Matrix-Objekt als Referenz: Durch Übergabe des Matrix-Objekts als Wenn Sie eine Referenz angeben, können Sie das implizite Matrix-Objektargument vermeiden.
std::ostream& operator<< (std::ostream& stream, const Matrix& matrix) const { [...] }
Beachten Sie, dass die zweite Option das erfordert Operator<< Funktion muss als const deklariert werden, da sie das Matrix-Objekt nicht ändert.
Das obige ist der detaillierte Inhalt vonWarum funktioniert meine Matrix-Klasse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!