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) LastErrorLastError(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 ...
-
- in einer konstanten memberfunktion kannst du nur andere konstante memberfunktionen aufrufen.
- 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!