Probleme mit konstanter Memberfunktion



  • hiho,

    also, ohne Umschweife gleich zum Problem:

    Ich hab ne Klasse

    namspace wp{
    
    const int does_not_exist = 21;
    
    class CDevGlobal {
    	public:
    		bool GetUser(int nID, PSUser user) const;
    		//...
    	private:
    		mutable int last_error;
    		void SetLastError(int nErrCode);
    		//...
    };
    
    }
    

    SetLastError sieht folgendermasen aus:

    void CDevGlobal::SetLastError(int nErrCode)
    {
    	last_error = nErrCode;
    }
    

    so, jetz' zum Problem,
    ich rufe in meiner GetUser-Funktion (die ja const ist) LastError

    LastError(does_not_exist);
    

    auf, aber ich bekomme folgende Compilerfehlermeldung:

    error C2662: 'wp::CDevGlobal::SetLastError' : cannot convert 'this' pointer from 'const wp::CDevGlobal' to 'wp::CDevGlobal &'
            Conversion loses qualifiers
    

    Für micht gibt diese Meldung nur garkeinen Sinn, da ja last_error mit mutable deklariert wurde, und "last_error = does_not_exist" auch funktionieren würde.

    Achja, ich weiss das ich das Problem nicht hätte wenn ich das const bei der Funktion weglassen würde etc. allerdings will ich es verstehen.

    mfg

    k1ro

    Edit:

    würde ich LastError so aufrufen:

    CDevGlobal* buf = const_cast<CDevGlobal*>(this);
    buf->SetLastError(does_not_exist);
    

    würde es zwar funktionieren, aber das ganze ist eine mehr als nur häßliche Lösung ...



    1. in einer konstanten memberfunktion kannst du nur andere konstante memberfunktionen aufrufen.
    2. eine konstante memberfunktion kann nur als mutable deklarierte elementvariablen verändern.

    2. ändert aber nichts an 1.
    also:

    void SetLastError(int nErrCode) const;
    

    SetLastError konstant machen, denn SetLastError hält 2. ja ein, und damit hält GetUser 1. ein.



  • super, danke!


Anmelden zum Antworten