Warum klappt dieser dynamic_cast nicht????
-
Warum bringt der folgende Code beim Compilieren eine Warnung
"warning C4541: 'dynamic_cast' fuer polymorphen Typ 'class MyException' mit /GR- verwendet; unvorhersehbares Verhalten moeglich"
und bei der Ausführung von dynamic_cast() eine Exception...???...versteh ich nicht...normaleweise sollte das doch funktionieren....was mache ich falsch...
MyException * e = new MyException();
MyException * e2 = dynamic_cast<MyException *> (e);if (e2 == NULL){
AfxMessageBox(CString("Cast nicht ok"));
} else {
AfxMessageBox(CString("cast ok"));
}(MyException ist in dem Fall ne leere Dummy-Klasse. Ich hab sie nur eben kurz mit VisualStudio eingefügt als generische Klasse, die von nichts abgeleitet ist...)
-
Ich kenne den Compiler nicht, aber ich würde jetzt einfach mal raten (aus der Fehlermeldung), man muss /GR+ setzen damit er RTTI Informationen erzeugt.
-
Erstens ist das "nur" eine Warnung
Und zweitens kann man bei Visual Studio die RTTI (Run Time Type Information) auch ausschalten - danach wird das Programm etwas kleiner, aber dynamic_cast und typeid funktionieren nicht mehr richtig.
-
Nachtrag: Die entsprechende Option findest du im Visual Studio unter Projekt -> Einstellungen -> C/C++ -> Programmiersprache C++.
-
Bei der Warnung ist der ist die Laufzeit-Typinformation(RTTI) im VC nicht aktiviert. Damit kann die Richtigkeit eines dynamic_cast nicht geprüft werden.
-
MyException * e = new MyException(); MyException * e2 = dynamic_cast<MyException> (e);
-
HirnAktivieren schrieb:
MyException * e = new MyException(); MyException * e2 = dynamic_cast<MyException> (e);Wenn man keine Ahnung hat...