Polymorphismus



  • Vielleicht stehe ich auf dem Schlauch, aber ich habe ein seltsames Problem:
    Um das Konzept einer globalen Basisklasse Object, wie es sie in Java gibt, nachzubilden, habe ich eben derartige Klasse entworfen. Sie besitzt keine Member und nur Ctor und Dtor:

    class Object{
    public:
      Object();
      ~Object(void);
    };
    

    Nun habe ich einige anderen Klasse davon abgeleitet, zB class AudioTrack: public Object{...}.

    Im weiteren Verlauf führe ich einen dynamic_cast durch, um Methoden der abgeleiteten Klassen verwenden zu können zB dynamic_cast<AudioTrack*>(obj), allerdings bekomme ich dann immer diese Fehlermeldung:

    error C2683: dynamic_cast : 'Object' is not a polymorphic type : see declaration of 'Object'

    wo kann der fehler liegen?



  • Hallo,

    in C++ sind Objekte nicht automatisch polymorph, wie in Java. Das Wort "virtual"
    ändert das:

    class Object{
    public:
      Object();
      virtual ~Object(void);
    };
    


  • Du musst den Destruktor virtual machen:

    virtual ~Object();

    Ein Destruktor nimmt auch keine Parameter, also sollte strenggenommen auch kein void in den () stehen :), beim Ctor dagegen schon.



  • ok, vielen dank!
    ich hab sogar schon eine virtuelle methode foo() gehabt, aber recht elegant wäre diese lösung nicht gewesen...
    das void wird ja vom visual studio automatisch eingefügt, dummerweise hab ich's bei der falschen klammer gelöscht *schäm*

    lancelot


Anmelden zum Antworten