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ückgabetyp const 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


Anmelden zum Antworten