Konstante Referenz



  • main.cpp:

    #include "class.h"
    
    int check(const SomeClass& someclass)
    {
    	return someclass.get_value();
    }
    
    int main(void)
    {
    	SomeClass sc;
    
    	return 0;
    }
    

    class.h:

    #ifndef _CLASS_H_
    #define _CLASS_H_
    
    class SomeClass
    {
    private:
    
    	int value;
    
    public:
    
    	SomeClass();
    	~SomeClass();
    
    	int get_value();
    
    };
    
    #include "class.cpp"
    
    #endif //_CLASS_H_
    

    class.cpp:

    SomeClass::SomeClass()
    {
    	SomeClass::value = 0;
    }
    
    SomeClass::~SomeClass()
    {
    
    }
    
    int SomeClass::get_value()
    {
    	return SomeClass::value;
    }
    

    Compiler Fehlermeldung:

    main.cpp:6:29: Fehler: Die Übergabe von »const SomeClass« als »this«-Argument von »int SomeClass::get_value()« streicht Qualifizierer [-fpermissive]
    

    Was ist das Problem hier bei der Übergabe einer konstanten Referenz eines Objekts? Ich kann die Methoden dieser Referenz nicht ansprechen...



  • Du kannst auf ein konstates Objekt nur Funktionen aufrufen, die garantieren, dass das Objekt nicht veraendert. Du musst die Funktion also wie folgt deklarieren:

    int get_value() const; // Sagt, dass die Funktion keine Member des Objekts veraendern
    


  • // class.h
    int get_value() const; // <-- hier const hinzufügen
    
    // class.cpp:
    int SomeClass::get_value() const // <-- hier const hinzufügen
    

    Lies am besten das hier: http://www.parashift.com/c++-faq-lite/const-correctness.html



  • icarus2 schrieb:

    Du kannst auf ein konstates Objekt nur Funktionen aufrufen, die garantieren, dass das Objekt nicht veraendert. Du musst die Funktion also wie folgt deklarieren:

    int get_value() const; // Sagt, dass die Funktion keine Member des Objekts veraendern
    

    Alles klar, funktioniert, danke für die schnelle und hilfreiche Antwort!



  • RussianTux schrieb:

    Alles klar, funktioniert, danke für die schnelle und hilfreiche Antwort!

    Und zum Abschluss noch den Hinweis an dich RussianTux, dass es eine konstante Referenz nicht gibt. Das const bezieht sich auf das referenzierte Objekt, und nicht auf die Referenz.



  • nur ums mal gesagt zu haben:
    #include "class.cpp"
    keine gute idee



  • unskilled schrieb:

    nur ums mal gesagt zu haben:
    #include "class.cpp"
    keine gute idee

    Ist natürlich klar, diente nur der schnellen Kompilierung und der Übersichtlichkeit


Anmelden zum Antworten