Error: invalid conversion from 'const X*' to 'X*'



  • Hallo,
    ich habe gerade ein Problem mit const, das ich irgendwie nicht verstehe.

    class ABC
    {
    
    public:
        int foo;
        int* getfoo()const {return &foo;}
    
    };
    

    Hier krieg ich den Fehler:

    Fehler:invalid conversion from 'const int*' to 'int*' [-fpermissive]
    

    Ohne const gibts hier natürlich keinen Fehler.
    Könnte mir bitte jemand erklären, wo hier das Problem liegt?



  • da du die methode const machst, sind alle member des Objekts innerhalb dieser Methdoe const.

    da sheißt du erzeugst einen Zeiger auf einen const int, was const int* ist.

    Mach den Rückgabewert einfach const int*, dann hat sich die Sache.



  • Stimmt, so gehts, danke 🙂
    Aber dann versteh ich nicht, warum dann das hier geht:

    int foo;
        int getfoo()const {return foo;}
    

    Weil hier müsste foo dann doch auch innerhalb der Methode const int sein. Warum kann ich dann ein int zurückgeben?


  • Mod

    Ersten ist getfoo hier nicht const und selbst wenn es das wäre, würdest du ja eine Kopie zurück geben. Kopieren verändert ein Objekt (zumindest bei "normalen" Kopierkonstruktoren) nicht, daher kann man konstante Objekte problemlos kopieren.



  • Oh ja, sollte schon const sein, habs geändert.

    Achso.., weil wenn ich einen nicht-const Pointer zurückgebe, könnte es ja sein, dass er oder das Original-Objekt geändert wird, aber beim Zurückgeben einer Kopie kann ich das Original ja nicht verändern.
    Ok, ich glaub, ich habs verstanden, danke 🙂


Anmelden zum Antworten