Exceptions in VC++



  • Hallo!

    Ich hab gerade folgender Maßen versucht eine Exception aufzufangen:

    try {
    	i = pB3->GetCheck();
    } catch(std::exception &e) {
    	return false;
    }
    

    Sollte so in C++ funktionieren... Aber hier nicht:

    C:\Dokumente und Einstellungen\joerg\Desktop\neu\Dialog1.cpp(1503) : error C2653: 'std' : Keine Klasse oder Namespace
    C:\Dokumente und Einstellungen\joerg\Desktop\neu\Dialog1.cpp(1503) : error C2061: Syntaxfehler : Bezeichner 'exception'
    C:\Dokumente und Einstellungen\joerg\Desktop\neu\Dialog1.cpp(1503) : error C2310: catch-Behandlungsroutine muss einen Typ angeben
    C:\Dokumente und Einstellungen\joerg\Desktop\neu\Dialog1.cpp(1508) : error C2317: Der 'try'-Block ab Zeile '1501' besitzt keine catch-Behandlungsroutinen
    

    Warum kennt er kein std?
    Was für ein Typ für catch?
    der try-Block hat doch ein catch...?



  • Header: <exception>



  • Danke!

    Klappt trotzdem noch nicht...

    Es kompiliert jetzt, die Exception aus dem try-Block wird aber trotzdem nicht abgefangen!

    Kann es sein, dass ich die Exception, die geworfen wird, so gar nicht abfangen kann?



  • Es kommt ja darauf an von welchem Typ die geworfene Exception ist. Wenn du std::exception im catch abfängst, fängst du nur Exceptions vom Typ std::exception ab (also die, die davon geerbt haben).

    Du mußt in die Doku von GetCheck() schauen, welcher Typ geworfen wird.

    Wenn dir der Typ unbekannt ist, kannst du im NOTFALL auch ... abfangen.

    try {
        i = pB3->GetCheck();
    } catch(...) {
        return false;
    }
    

    Aber das ist dann wirklich eine Notlösung und ist nur letztes Mittel.



  • Und MFC Klassen werfen afaik lieber Nachkommen von CException als von std::exception (die sind leider nicht miteinander verwandt).


  • Mod

    Nachtrag: ... und sie werfen Zeiger auf CException die man mit der Memberfunktion Delete bei nicht mehr benötigen entsorgen muss!


Anmelden zum Antworten