nicht-konstante funktion fuer konstantes object aufgerufen
-
hola leute
folgende warnung bekomme ich beim kompilieren angezeigt(BCB6):
nicht-konstante funktion fuer konstantes object aufgerufen
mal bissl code
die header datei:class TxlString { private: inline unsigned int& BufferSize(void); inline unsigned int& StringLen(void); inline char* Buffer(void); inline void Xalloc(char *t_buffer,unsigned int t_size); char *buffer; public: inline TxlString(void); inline TxlString(const TxlString &t_string); inline TxlString(const char *c_string); inline TxlString(const unsigned short t_size); inline ~TxlString(void); inline unsigned int GetBufferSize(void); inline unsigned int GetStringLen(void); };
jetz die cpp datei:
inline TxlString::TxlString(void) : buffer(0) { } inline TxlString::TxlString(const TxlString &t_string) { int unsigned t_size = t_string.GetStringLen(); // (1) Xalloc(buffer,BufferSize() = (StringLen() = t_size) + 1); } inline TxlString::TxlString(const char *c_string) { } inline TxlString::~TxlString(void) { if(buffer) free(buffer); } ...
in zeile (1) is das problem mit GetStringLen().
wie muss ich das machen damit die warnung verschwindet ?Meep Meep
-
Hallo,
wie wär's wenn du getStringLen einfach als const deklarieren würdest? Schließlich ändert diese Methode nicht den logischen Zustand deines String-Objekts (das wäre wirklich sehr sehr unangebracht).
-
Möglicherweise läßt Du Dir irgendwo
ein Objekt vom Typ TxlString als const ausliefert.Zum Beispiel:
const TxlString& FooBar::getString() const;
Ein Aufruf von
FooBar myObj; const TxlString& myString = myObj.getString(); unsigned int length = myString.GetStringLen();
führt dann zu einem Fehler während des Compilierens.
Du könntest vielleicht auch Deine Funktion GetStringLen()
als const deklarieren. Also so z. B.:inline unsigned int GetStringLen() const;
Das hängt aber davon ab, was Du in GetStringLen() so treibst.
Gruß
H.-Gerd
-
Balrog schrieb:
Das hängt aber davon ab, was Du in GetStringLen() so treibst.
Bitte? Also wer in GetStringLen einer Stringklasse etwas macht, was den *logischen* Zustand des Stringobjekts ändert, der gehört eindeutig verkloppt.
-
Klar, Deiner Meinung kann ich mich eigentlich nur anschließen.
Aber ich hab' den Eindruck, dass hier im Forum viele unterwegs
sind, die noch ein bißchen üben müssen...Gruß
H.-Gerd
-
@Balrog
Naja, in meinem letzten Posting fehlt auch ein
Ich wollte nur zum Ausdruck bringen, dass der OP a) GetStringLen auf jeden Fall const deklarieren sollte und b) sich dringend mit const-correctness beschäftigen sollte, falls nicht klar sein sollte warum.