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.


Anmelden zum Antworten