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?


  • Mod

    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 const hier würde ich mir gleich abgewöhnen, es bringt nämlich nichts. Wenn schon, dann const Beispiel& , also eine Referenz.


  • Mod

    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.


Anmelden zum Antworten