Unbehandelte Ausnahme bei dynamic_cast
-
Hallo,
jedes mal wenn ich per dynamic_cast einen Pointer Downcasten möchte gibt es eine Unbehandelte Ausnahme: "C++ Exception". Vielleicht kann mir ja jemand weiterhelfen.
class X { public: virtual void DO() { cout << "X::DO()" << endl; } }; class Y : public X { public: virtual void DO() { cout << "Y::DO()" << endl; } void NO() {cout << "Y::NO()" << endl;} }; int main() { Y *y = new Y; X* x = y; Y *py= dynamic_cast <Y*> (x); return (0); }
-
erstens: Wo ist das delete?
zweitens könntest du doch erstmal selbst versuchen mit try-catch die Position zu bestimmen, wo die Exception fliegt.
drittens sollte deine Basis-Klasse einen virtuellen Destruktor haben!!!
-
Also natürlich benutze ich diese Klassen nicht wirklich. Die sind nur exemplarisch. Aber der Bug tritt bei den simplen Klassen genauso auf, wie bei den die ich eigentlich benutze und die haben auch alle virtuelle Destruktoren.
Die Exception tritt in folgender Zeile auf:Y *py= dynamic_cast <Y*> (x);
Exception Handling sollte hier nichts bringen, da eine Exception lediglich beim Benutzen von Referenzen ausgelöst wird. Bei Pointern gibts Null-Pointer zurück, falls dynamic_cast nicht klappt.
Ich habe auch <typeinfo> inkludiert, weil ich noch RTTI beutzen. Aber trotzdem tritt immer wieder die gleiche Exception auf.
-
Prüfe, ob für deinen Compiler die RTTI-Fähigkeit eingestellt wurde.
Bei manchen Compilern kann die RTTI abgeschaltet werden mit dem Ergebnis, dass der dynamic_cast bei Ausführung eine Exception wirft.