Operatoren überladen
-
Hallo !
Ich verstehe nicht, was daran falsch ist ?
/* .. HEADER - DATEI .. */ class { private: unsigned int *pString; public: //... char operator[] (unsigned int index) { return (char)pString[index]; } unsigned char operator[] (unsigned int index) { return (unsigned char)pString[index]; }Eine Definition klappt, beide nicht. Warum ? Es ist doch komfortabel es sowohl für unsigned als auch für signed zu nutzen ?
Noch eine Frage. Folgender Code kann nicht kompiliert werden
const LPCSTR GetString(void) const { return (LPCSTR)pString; } const unsigned char * GetString(void) const { return (unsigned char*)pString; }Dieser hier dagegen schon
const LPCSTR GetString(void) const { return (LPCSTR)pString; } const unsigned char * GetString(void) { return (unsigned char*)pString; }Woran liegt das ?
Gruß Michael
-
Hallo,
überlege es doch einmal logisch, was du da probierst
char operator[] (unsigned int index) { return (char)pString[index]; } unsigned char operator[] (unsigned int index) { return (unsigned char)pString[index]; }und jetzt stelle dir einen Aufruf oder die Anwendung des Operators vor...wie soll der Compiler denn anhand der Argumente die erste Überladung des Operators von der zweiten unterscheiden können? Das macht er nämlich aufgrund der Parameter-Typen und wenn die gleich sind, dann bekommst du eben eine Fehlermeldung.
Überladene Funktionen müssen sich in der Signatur der Funktionen in der Parameter-Liste unterscheiden, es reicht nicht (aus den oben angegebenen Gründen) ein unterschiedlicher Rückgabe-Typ! Außerdem ist ein solcher Unterschied schon gegeben, wenn ein const der Deklaration folgt, auch wenn die Parameter-Liste hinsichtlich der Typen identisch ist (nur deswegen geht Variante zwei deiner Versuche!)
Ein Tipp noch: für solche grundsätzliche Fragen bietet sich auch das C++ - Forum an...
MfG