verschiedene Klassen in einem Vektor



  • Kurz:

    struct Base {};
    struct Derived : Base {};
    
    Base* b = new Derived;
    delete b;
    

    Was die letzte Zeile tut, ist undefiniert, weil Base keinen virtuellen Destruktor hat. Richtig geht es so:

    struct Base { virtual ~Base() {} };
    

    Als Faustregel sollten Basisklassen einer Hierarchie einen virtuellen Destruktor und privaten Kopierkonstruktor und Zuweisungsoperator haben. Also mal ausführlich:

    class Base
    {
    private:
        // Werden nie definiert. So kann man nicht aus Versehen einer Base-
        // Instanz eine Derived-Instanz zuweisen.
        Base(const Base&);
        Base& operator=(const Base&);
    
    public:
        // Erlaubt definiertes Löschen durch ein Base*
        virtual ~Base() {}
    };
    


  • Aha,

    das ist klar. Leider stürzt das Pogramm immer noch ab. Ich hab schon hunderte Versuche unternommen, aber es passiert immer noch. Auch, wenn externe Objekte (also nicht Objekte innerhalb des Vektors) gerendert oder bewegt werden sollen. Der Debugger sagt mir soweit gar nichts, außer Acress violation.

    Kann vielleicht jemand etwas damit anfangen?

    Danke



  • vObject ist doch deine Liste ?
    Und Move und Render sind Methoden deiner ListObjecte ?

    muesste also maximal heissen vObject[0]->Move(); oder so ?

    aber ich nehm mal an, das meintest du auch ? Kompilieren wuerde er das so nich :p Und zeig mal, wie du die casts machst ? Da deine Listelemente ned vom typ CBase sind, kennt der compiler das move und render ned ... erst nach dem cast ...
    CObject ist das der MFC Typ, oder selbst definiert ?

    Ciao ...



  • Hast du denn schon das gemacht was D1BAKEL gesagt hat?



  • Ja, hast du schonmal gemacht, was ich gesagt hab??? 😃 😕


Anmelden zum Antworten