dynamic_cast und virtualle Ableitung
-
Hallo Leute
ich kann den unten angegebenen Code komplieren,
aber beim ausführen steigt es in der Zeile 49 (Long *longValue2 = dynamic_cast<Long *>(obj);) aus.
Ich konnte nicht feststellen warum ?
Ich bin für jede Hilfe dankbar.class Object{ public: int i; Object(); virtual ~Object(); }; class Number : public virtual Object{ public: int n; Number(); virtual ~Number(); }; class Long : public Number{ public: int l; Long(); virtual ~Long(); }; Object::Object() { i = 0; } Object::~Object(){} Number::Number():Object() { n = 0; } Number::~Number(){} Long::Long():Object(), Number() { l = 0; } Long::~Long(){} int main(int argc, char* argv[]) { Long l; Object *obj = &l; Number *number = &l; Long *longValue = (Long *) number; Long *longValue2 = dynamic_cast<Long *>(obj); printf("Hallo Welt!\n"); return 0; }mfg
funcky
-
Ich sehe da kein Problem. Wie meinst du steigt er aus?
Wenn sich die Konsole einfach wieder schliesst und du das printf nicht siehst, dann ist das ganz normal. Da dein Programm zu Ende ist. Wenn du etwas sehen möchtest, dann musst du da noch warten..Häng das mal unten an, anstatt printf: (noch #include <iostream> oben anfügen.)
std::cout << "Hallo, Welt"; std::cin.clear(); // Fehlerstates zurücksetzen std::cin.ignore(std::cin.rdbuf()->in_avail());//alle Zeichen aus dem Buffer entfernen std::cin.get(); //auf Eingabe wartenAchja:
Downcasts sind in dem Sinne gefährlich, dass, wenn der Zieltyp keine Ableitung des Argumenttyps ist 0 zurückgegeben wird.
-
Ich meine auch das es kein Problem geben sollte. Allerdings steigt das Programm mit einer Exception aus. Mit welcher Exception kann ich nicht sehen.
Mit dem unten angegebenen Code läuft das Programm durch.try{ Long *longValue2 = dynamic_cast<Long *>(obj); } catch(...){}
-
Als Exception bekomme ich folgenden Meldung:Access violation - no RTTI data!
-
Hat sich erledigt. In den Projekteinstellungen war RTTI deaktiviert.
-
funcky schrieb:
Hat sich erledigt. In den Projekteinstellungen war RTTI deaktiviert.
Das einstellen wäre noch von Vorteil, wenn man da dynamic_cast anwendet.
