Fehler beim Überladen einer Funktion mit und ohne const-Rückgabe
-
Hallo,
ich benutze dev-c++ 4.9.9.2 und er spuckt bei folgendem Code eine Fehlermeldung aus. (Der Übersicht halber nur die 4 relevanten Zeilen)
class v3 { public: double x[3]; const GLdouble& operator[](const int i) { return x[i]; } GLdouble& operator[](const int i) { return x[i]; } };er sagt, dass er die funktionen nicht überladen kann.
in einem buch ("Effektiv C++ programmieren", Kapitel 21, 1993 erschienen) ist das aber (in einem analogen fall) genauso überladen worden, also 2 funktionen, die bis auf const bei der referenz-rückgabe identisch waren.
wo liegt der fehler?
ist ein solches überladen generell falsch (und damit der standard zur releasezeit des buches vielleicht überholt)?
und welche andere möglichkeit gibt es, operator[] sowohl für const, als auch nicht-const-referenzen zu benutzen?
-
Du kannst generell nicht nach dem Rückgabetyp überladen.
-
Lies dir das Kapitel im Meyers nochmal durch und achte genauer auf den Quelltext. Ein const hast du bei dir vergessen, leider das entscheidende.

class v3 { public: double x[3]; const GLdouble& operator[](const int i) const //!!!! { return x[i]; } GLdouble& operator[](const int i) { return x[i]; } };
-
danke, funktioniert!
in meiner auflage des buches steht es aber (hab nochmal nachgeguckt) ohne das "entscheidende" const - na gut, sind sowieso noch paar tippfehler drin

hab mich schon gewundert, dass es da fehlt und dachte eigentlich, dass ich es probiert habe .. aber scheinbar war doch irgendwas verkehrt.
danke für den tipp!
-
hermesasl schrieb:
in meiner auflage des buches steht es aber (hab nochmal nachgeguckt) ohne das "entscheidende" const - na gut, sind sowieso noch paar tippfehler drin

Deine Ausgabe ist ohnehin schon recht alt (In der Neuauflage ist der Punkt z.B. nicht mehr 21 sondern 3) und hat einiges an "Updates" erfahren.