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ügenLies 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 veraendernAlles 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
constbezieht 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 ideeIst natürlich klar, diente nur der schnellen Kompilierung und der Übersichtlichkeit