Fehler bei operator << overloading mit const
-
Hallo habe eine Frage an Euch ...
Ich verzweifel gerade und weiß nicht woher der Fehler kommt:Es geht um folgenden Operator:
ostream& operator << ( ostream& out,const CComponent& rop ) { out << rop.m_type << " " << rop.m_name << ": " << rop.m_value << " x 10^" << rop.getUnitValue() << endl; return out; }
Wenn ich das const weg mache funktioniert es, aber warum ? const hindert ja die Funktion daran den Parameter zu ändern, was bei mir aber nicht der Fall ist.
Die Fehlermeldung:
Description Resource Path Location Type passing 'const CComponent' as 'this' argument of 'const int CComponent::getUnitValue()' discards qualifiers [-fpermissive]
Die Funktion getUnitValue:
const int CComponent::getUnitValue() { switch ( m_unit ) { case MICRO: return -6; break; case MILLI: return -3; break; case ONE: return 0; break; case KILO: return 3; break; case MEGA: return 6; break; } cout << "ERROR: falsche Einheit" << endl; return 0; }
Komisch mein Prof hat den Operator genauso überladen, aber bei mir geht es nicht -.-
-
Ich weiß schon warum -.-
Kann gelöscht werden SOrry
const int CComponent::getUnitValue() { }
Kann ja nicht funktionieren weil da der return Wert nicht geändert werden darf....
Es hätte
int CComponent::getUnitValue() const { }
heißen sollen!!!
Tut mir Leid
-
buu2188 schrieb:
Kann ja nicht funktionieren weil da der return Wert nicht geändert werden darf....
Dass der Return-Wert nicht geändet werden durfte war hier allerdings nicht dein Problem - auch wenn es kaum eine sinnvolle Anwendung für das
const
gibt,
wenn man by value zurückgibt. Ich denke das ist wichtig zu verstehen, daher erwähne ich es hier nochmal, auch wenn das Problem bereits gelöst ist. Die Stream-
Ausgabe mit<<
verändet des zurückgegebenen Wert nicht, daher ist es egal ob der Rückgabetypconst
ist oder nicht.Ich hoffe du hast verstanden, dass eine nicht-const-qualifizierte Funktion (ohne
const
am Ende) dem Compiler mitteilt "ich kann dieses Objekt verändern".
Daher kann man bei einem const-Objekt (rop
) eben nur Funktionen aufrufen, die const-qualifiziert sind, die also garantieren, dass Objekt nicht zu verändern
(oder genauer - etwas salopp: Die garantieren, das Objekt nicht von außen beobachtbar zu verändern).Finnegan