Vererbung



  • Hallo Zusammen,

    ich denke ich habe hier nur ein kleines problem, deswegen lasse ich den Code erstmal weg.
    Ich habe eine Superklasse, die eine verkette Liste bildet. Von der Klasse habe ich nun eine Subklasse abgeleitet. Die Subklasse soll nun auf jedes 3. Element der Superklasse zeigen (sind alles char).
    Mein Fehler: invalid conversation between ...den beiden klassen

    Warum 😞


  • Mod

    Bitte den Code (reduziert auf das wesentliche) posten.

    ich denke ich habe hier nur ein kleines problem, deswegen lasse ich den Code erstmal weg.

    Und trotzdem postest du die Fehlermeldung, in der Hoffnung, wir können deinen konkreten Fehler daraus ableiten?

    Die Subklasse soll nun auf jedes 3. Element der Superklasse zeigen (sind alles char).

    Also gewissermaßen ein stride. Iteratoren, die immer auf ein n-tes Element verweisen, wurden bereits mehrfach implementiert. Suche mal danach im Forum.



  • /* Init (nur wichtigster code) */
    template < class X > 
    class Node
    {
      Node *next; 
      int data;
    }
    
    template <class X> 
    class Node2 : public Node <X>
    {
      Node2 *d;
    }
    
    /* irgendwo im code */
    Node < T > *start;
    start = next;
    
    /* In einer Funktion */
    
    Node2 < T > *f = 0;
    f = start;             <<<<<<<---------- PROBLEM invalid conversion from Node<char>* to Node2<char>*
    

    hmm , brauche ich vielleicht nicht eine zugriffsfunktion ?



  • Das ist ja auch ein Downcast.
    Downcasts sind generell ein Zeichen von schlechtem Design, dafür verwendet man virtuelle Funktionen.
    Geht nicht, weil Node keine virtuelle Funktionen anbietet?
    Da haste deinen Designfehler.
    Faustregel: Erbe nur von abstrakten Basisklassen.
    Ich weiß zwar nicht, ob * (irgendwie ein unpraktischer Name in dem Kontext eines Programmierforums, zumal man gerne * 😉 ) recht hat, aber such trotzdem mal danach.
    Dann bekommste mit sicherheite eine flexiblerer Lösung.

    * für sowas hier verwendet.


  • Mod

    @Nathan:
    Strided Iterators gibt es AFAIR en masse. Es wundert mich sogar, dass du sie nicht kennst.


  • Mod

    Was der TE also wenn möglich tun sollte, ist das striden das sprunghafte Durchlaufen in eine andere Instanz, unabhängig von Node , zu verlagern. So wie eben jene Stride-Iteratoren.

    Aber zumindest ohne Vererbung.



    • schrieb:

    @Nathan:
    Strided Iterators gibt es AFAIR en masse. Es wundert mich sogar, dass du sie nicht kennst.

    Doch, ich hab neulich noch drüber nachgedacht, kam aber bisher noch nicht mit denen in Kontakt.


Anmelden zum Antworten