Const Object und Operator
-
#include <iostream> #include <stdio.h> using namespace std; struct Int { int dat; Int() { dat = 5; } Int operator + (const Int &b) { Int erg; erg.dat = dat + b.dat; return erg; } }; int main() { const Int a; // Fehler const Int b; Int c = a + b; return 0; }aber
#include <iostream> #include <stdio.h> using namespace std; struct Int { int dat; Int() { dat = 5; } Int operator + (const Int &b) { Int erg; erg.dat = dat + b.dat; return erg; } }; int main() { Int a; // Keiner Fehler const Int b; Int c = a + b; return 0; }Warum ist das so?
-
Was genau ist da der Fehler?
Ich glaube nicht die Zeile, die du da markiert hast.Was aber zu einem Fehler führen sollte ist, dass du eine nicht konstante Operation auf einem konstanten Objekt ausführen willst, nämlich den +-Operator
-
Du musst deinen
operator+so definieren, dass er auch mit einem konstanten Objekt funktioniert:#include <iostream> Int operator + (const Int &b) const { Int erg; erg.dat = dat + b.dat; return erg; } };
-
Vielen Dank
-
Wobei ich es vorziehe den
operator+als freistehende Funktion zu definieren. Man kann dann in der Implementierung direkt auf denoperator+=zugreifen, der eine Memberfunktion bleibt:struct Int { int dat; Int() { dat = 5; } Int& operator+= (const Int& rh) { dat += rh.dat; return *this; } }; Int operator+ (const Int& lh, const Int& rh) { Int rvo(lh); rvo += rh; return rvo; }