Error: initial value of reference to non-const sein muss ein Wert
class A
{
public:
int v;
A * p;
A& operator*(const A& a)
{
return this->v*a.v//here is a red line under this say error initial value of reference to non-const must be an value
}
~A()
{
this;
}
};
int main()
{
A a;
a.p = new A;
delete a.p;
return 0;
system("pause");
return 0;
}
überladen von operator * kann ich nicht verwenden, das zur Darstellung des Objekts an sich. Warum dies passiert ist.
- Es ist ein binärer operator (multiplizieren) - nicht um einen pointer zu dereferenzieren.
- Oh. ja. du hast Recht.
- Ich danke Ihnen sehr.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sicher sein, es sagt, dass es sein muss eine lvalue. Sie versuchen die Rückgabe einer Referenz auf ein temporäres. Das ist schlechtes karma.
Außer, es ist überhaupt nicht das, was Sie wollen. Die Multiplikation operator sollte auf jeden Fall ein Wert zurückgegeben, nicht eine Referenz.
Nicht sicher, was Ihr Konstruktor aussieht, aber angenommen, es dauert eine Ganzzahl:
Edit:
Und eigentlich sollte man noch einen Schritt weiter gehen:
return lh *= rh;
. Keinestd::move
oder noch eine weitere lokale variable benötigt wird.return *this;
imoperator*=
?this->v*a.v
ergibt eineint
. Einint
kann nicht konvertiert werden, einA&
.Verwenden
Sollten Sie die member-Funktion a
const
member-Funktion zu, da es nicht ändern Sie das Objekt.Ergebnis
this->v * a.v
ist ein rvalue, eine temporäre Unbenannte Wert. Als ein temporäres, es kann nicht binden an eine non-const Referenz. Nur lvalues binden können, um non-const Referenzen. Das ist es, was die Fehlermeldung "initial value of reference to non-const sein muss, die ein l - Wert" bezieht.Jedoch, die Sie nicht wollen, um wieder eine const-Referenz entweder, Sie wollen wieder den Wert von Wert:
Hinweis: dies wird nicht fix deinen code komplett, wie Sie versuchen, um eine
int
wo Sie erklärt, um eineA
, undint
ist nicht implizit konvertierbarA
in Ihrer aktuellen code.