Objekt an Funktion mit konstantem Parameter übergeben
-
Ich versteh es einfach nicht..
void demo(const A& obj) { cout << obj.getNr() << endl; }Schon beim Schreiben der Funktion bekomme ich diese Fehlermeldung: "this-Zeiger kann nicht von 'const A' in 'A &' konvertiert werden".
Ich versteh es aber nicht. Was muss ich anders machen?
-
Dann ist getNr wohl nicht const.
struct A { rückgabetyp getNr(); // -> rückgabetyp getNr() const; };
-
Hat leider nix gebracht.
Mal das ganze Ding:class Beispiel { private: int nr; public: Beispiel() : nr(0) {} int getNr() {return nr;}; void setNr(int nr) {this->nr = nr;} }; void demo(const Beispiel obj) { cout << obj.getNr() << endl; } int main() { Beispiel a; a.setNr(5); demo(a); }
-
Ratlos555 schrieb:
Hat leider nix gebracht.
Du hast ja gar nichts geändert.
Übrigens:
void demo(const Beispiel obj)Das
consthier würde ich mir gleich abgewöhnen, es bringt nämlich nichts. Wenn schon, dannconst Beispiel&, also eine Referenz.
-
Du hast die vorgeschlagene Änderung nicht gemacht. Wieso sollte es dann funktionieren?
P.S.: Damit wir uns richtig verstehen: Das const gehört dann zur Funktionssignatur. Also
int getNr() const {return nr;}. Nicht so etwas wie
int getNr() {return nr;} const;
-
SeppJ spricht schon die Wahrheit.
Die Variante funktioniert mit der von SeppJ genannten Lösung:
class Beispiel { private: int nr; public: Beispiel() : nr(0) {} int getNr() const {return nr;}; //const garantiert demo() das sie nix ändert void setNr(int nr) {this->nr = nr;} }; void demo(const Beispiel obj) { std::cout << obj.getNr() << std::endl; } int main() { Beispiel a; a.setNr(5); demo(a); return 0; }
-
lalalala.. ich hatte das const in der tat ganz hinten dran gemacht. Deswegen hat es auch nicht geklappt und ich hab das Original gepostet.
Huppala :D!
Ich merke schon, SeppJ kennt sich mit den Anfängern und ihren Keine-Ahnung-hab-Fehlern aus.. vielen Dank :).
-
SeppJ schrieb:
Du hast die vorgeschlagene Änderung nicht gemacht. Wieso sollte es dann funktionieren?
P.S.: Damit wir uns richtig verstehen: Das const gehört dann zur Funktionssignatur. Also
int getNr() const {return nr;}. Nicht so etwas wie
int getNr() {return nr;} const;#include <iostream> using namespace std; class Beispiel { private: int nr; public: Beispiel() : nr(0) { } int getNr() /*const*/{ return nr; } const//compiliert sogar void setNr(int nr) { this->nr = nr; } }; void demo(const Beispiel obj) { cout << obj.getNr() << endl; } int main() { Beispiel a; a.setNr(5); demo(a); }Das werde ich mir jetzt angewöhnen, hihi.