Try Catch Frage
-
???
hä, wie funktioniert das?
wo steht dann mein String drin?
-
Im std::string errorMessage. Da wurd dem Konstruktor der Rückgabewert von what() übergeben.
-
ok, ich glaub ich bin dafür zu blöd, angenommen ich möchte ex.what() in einen sting speichern und ausgeben, wie geht das
sting s; . . . catch(exception &ex) { string=ex.what(); cout<<s<<endl; }
so?
-
bigborre schrieb:
so?
ja, aber wozu brauchst du noch sting s?
einfach so geht eigentlich auch:catch(const exception &ex) { cout << ex.what() << endl; }
-
nein, es muss heißen:
string s; . . . try {} catch(exception &ex) { s = ex.what(); //oder, das was äquivalent ist nur halt schneller geht: string exception (ex.what()); // Aufruf des Konstruktors von string und // Erzeugung von "exception" -> in exception steht die Fehlermeldung cout << s << endl; //oder cout << exception << endl; }
-
Ok, mein eigentliches Problem, der Fehler soll in einer Messagebox ausgegeben werden
catch(exception& ex) { ex.what(); MessageBox( NULL, ex.what(),"Fatal Error" , MB_OK ); }
Alles funktioniert, bloß bei dem zweiten Parameter bringt er mir immer einen Fehler.
EDIT: @viande so geht es auch nicht, in exception steht kein String.
-
[quote="bigborre"]Alles funktioniert, bloß bei dem zweiten Parameter bringt er mir immer einen Fehler.
/quote]und so:
[cpp]catch(const exception& ex)
{
::MessageBoxA( NULL, ex.what(), "Fatal Error" , MB_ICONERROR );
}[/cpp]?
man braucht die Fehlermeldung, um etwas genaues zu sagen
-
Ne, hat nix gebracht hier mal die fehlermeldung:
error C2664: 'MessageBoxA' : Konvertierung des Parameters 2 von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' in 'const char *' nicht moeglich
Vielleicht weil ich ohne Klassen arbeite?
-
Nein, sondern weil WinAPI C ist und const char * erwartet, du aber mit std::string arbeitest. Deshalb musst du noch string::c_str() aufrufen, um den String umzuwandeln.
ex.what().c_str();
-
bigborre schrieb:
Ne, hat nix gebracht hier mal die fehlermeldung:
error C2664: 'MessageBoxA' : Konvertierung des Parameters 2 von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' in 'const char *' nicht moeglich
Vielleicht weil ich ohne Klassen arbeite?
[cpp]string s;
.
.
.
try
{
}
catch(exception &ex)
{
s = ex.what();::MessageBoxA( NULL, s.c_str(), "Fatal Error" , MB_ICONERROR );
}[/cpp]
-
Michael E. schrieb:
Nein, sondern weil WinAPI C ist. Deshalb musst du noch string::c_str() aufrufen.
(ex.what()).c_str();
[cpp]namespace std
{
class exception
{
virtual **const char ***what()
{
}
};
}[/cpp]
-
ssm: Sorry, hab nur auf die Fehlermeldung geguckt. Aber wenn er einen Umweg über std::string macht, dann stimmts ja wieder
std::string(ex.what()).c_str();
-
@ ssm hab es probiert, es klappt aber immer noch nicht, dafür hat sich jetzt die Fehlermeldung verändert
C2664: 'MessageBoxA' : Konvertierung des Parameters 2 von 'const char *(void) const' in 'const char *' nicht moeglich
Mir raucht echt schon die Birne.
-
weil du so geschrieben hast:
[cpp]::MessageBoxA( NULL, s.c_str, "Fatal Error" , MB_ICONERROR );[/cpp]du hast () vergessen.
versuch noch mal:::MessageBoxA( NULL, s.c_str(), "Fatal Error" , MB_ICONERROR );
-
Hab jetzt ne Läsung gefunden, hoffe mal das kein Datenverlust auftritt, aber ich denke nicht, es kommt keine Warnung, vielen Dank für die ausdauernde Unterstützung
Ach ja hier meine Lösung:catch(const exception &ex) { sprintf(buffer,ex.what()); ::MessageBoxA(NULL, buffer, "Fatal Error", MB_ICONERROR); }
funktioniert auch so
catch(const exception &ex) { sprintf(buffer,ex.what()); MessageBox(NULL, buffer, "Fatal Error", MB_ICONERROR); }
-
@ ssm du hast recht die klammern ham gefehlt, werd ich so machen , sprintf ist ja auch nicht gerade elegant Dank dir
-
bigborre schrieb:
Hab jetzt ne Läsung gefunden, hoffe mal das kein Datenverlust auftritt, aber ich denke nicht, es kommt keine Warnung, vielen Dank für die ausdauernde Unterstützung
Ach ja hier meine Lösung:catch(const exception &ex) { sprintf(buffer,ex.what()); ::MessageBoxA(NULL, buffer, "Fatal Error", MB_ICONERROR); }
funktioniert auch so
catch(const exception &ex) { sprintf(buffer,ex.what()); MessageBox(NULL, buffer, "Fatal Error", MB_ICONERROR); }
soll auch so funktionieren:
catch(const exception &ex) { sprintf(buffer,ex.what()); MessageBox(NULL, ex.what(), "Fatal Error", MB_ICONERROR); }