const correctness Problem



  • Hallo!

    Ich habe ein Problem mit einer konstanten Funktion einer Klasse. Und zwar habe ich folgende Situation:

    class A
    {
     private:
      methode_A(B b) const
      {
        //...
        b.methode_B(this,...)
        //...
      }
    }
    
    class B
    {
     public:
      methode_B(A* a,...) const
      {
        //...
        //hier wird das Objekt *a nicht verändert, bleibt also konstant
        //...
      }
    }
    

    Wenn ich das kompiliere, bekomme ich die Fehlermeldung, dass der 1. Parameter von methode_A nicht von "const A *const" zu "A*" konvertiert werden kann. Wenn ich methode_A nicht als const deklariere dann kompiliert er fehlerfrei, aber das wäre ja ein Verstoß gegen die const correctness und es geht doch sicher auch irgendwie anders oder? Schließlich ändere ich das Objekt a ja nicht in methode_B sondern lese es nur.
    Ich habe schon probiert methode_B als methode_B(const A
    a,...) zu deklarieren, aber das hat auch nicht geholfen.

    Vielen Dank schonmal!

    Viele Grüße,
    Sven



  • So?

    methode_B(const A* const a,...) const
    


  • David_pb schrieb:

    So?

    methode_B(const A* const a,...) const
    

    Das funktioniert leider auch nicht.



  • Sveno schrieb:

    David_pb schrieb:

    So?

    methode_B(const A* const a,...) const
    

    Das funktioniert leider auch nicht.

    Bei mir schon.


  • Mod

    Sveno schrieb:

    Das funktioniert leider auch nicht.

    Und das ist keine (brauchbare) Fehlerbeschreibung.



  • David_pb schrieb:

    So?

    methode_B(const A* const a,...) const
    

    Das macht keinen Unterschied, da das zweite const nur dafür sorgt, dass die Zeigerkopie konstant ist. An sind Funktionen, deren Parameter sich nur in Toplevel-CV-Qualifizierern unterscheiden, gleich.

    Sveno schrieb:

    Das funktioniert leider auch nicht.

    Zeig bitte ein minimales, aber vollständiges Beispiel, das dein Problem repräsentiert und kompilierbar ist. Also keine Auslassungspunkte, vergessene Rückgabewerte oder Strichpunkte und solche Sachen.



  • camper schrieb:

    Sveno schrieb:

    Das funktioniert leider auch nicht.

    Und das ist keine (brauchbare) Fehlerbeschreibung.

    Es kam der gleiche Fehler wie vorher.

    Hat sicher aber erledigt, ich Depp hatte das const nur in der .cpp Datei hinzugefügt und vergessen dies im Header auch zu tun.

    Vielen Dank.



  • Sveno schrieb:

    Hat sicher aber erledigt, ich Depp hatte das const nur in der .cpp Datei hinzugefügt und vergessen dies im Header auch zu tun.

    Und das hatte keinen Linkerfehler zur Folge? Schliesslich hast du dann eine Funktion aufgerufen, die nirgends definiert ist.



  • Nexus schrieb:

    David_pb schrieb:

    So?

    methode_B(const A* const a,...) const
    

    Das macht keinen Unterschied, da das zweite const nur dafür sorgt, dass die Zeigerkopie konstant ist. An sind Funktionen, deren Parameter sich nur in Toplevel-CV-Qualifizierern unterscheiden, gleich.

    Da hast' wohl recht!


Log in to reply