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...


Anmelden zum Antworten