catch-Frage
-
ich versuche eine datei zu laden (die ich vorher gespeichert habe). Die Datei könnte ja noch nicht exestieren (wenn z.B. das Programm zum ersen mal läuft). Hab erst so versucht:
try{ double tmp; ifstream ifs ("save.dat", ios::in | ios::nocreate); ifs>>tmp; Machwas(tmp); } catch(...) { Machwas(Standatwert); }
Wie kann ich jetzt hinkriegen, dass wenn die Datei nicht exestitet (fehlerhaft, oder sonst was ist), die Standertwerte bei catch verwendet werden.
mfg A-l-e-x
-
Dieser Thread wurde von Moderator/in flenders aus dem Forum WinAPI in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
double tmp = standardwert; ifstream in(...); if(in) in >> tmp; machwas(tmp);
Der ifstream wirft keine Exception. Die müsstest du selber werfen.
-
DrGreenthumb schrieb:
double tmp = standardwert; ifstream in(...); if(in) in >> tmp; machwas(tmp);
Der ifstream wirft keine Exception.
Das ist so nicht ganz korrekt. Du kannst ifstream über die exceptions()-Methode auch so konfigurieren, dass im Fehlerfall eine Exception geworfen wird.
Unter Berücksichtigung des Codebeispiels ist die Aussage aber natürlich richtig.
-
Ansonsten verstehe ich das Problem nicht, da du die Standardwerte ja kennen musst und die dann einfach im catch-Teil einsetzen kannst. Übrigens musst du vorsichtig sein, da hier wenn machwas eine Exception wirft machwas dann zweimal aufgerufen wird
-
HumeSikkins schrieb:
Du kannst ifstream über die exceptions()-Methode auch so konfigurieren, dass im Fehlerfall eine Exception geworfen wird.
hm, das gibts auch nur als Memberfunktion, oder kann man das auch global aktivieren?
-
Ach so. Man braucht eigentlich kein catch. Reicht auch eine if abfrage.
Danke
mfg A-l-e-x
-
DrGreenthumb schrieb:
HumeSikkins schrieb:
Du kannst ifstream über die exceptions()-Methode auch so konfigurieren, dass im Fehlerfall eine Exception geworfen wird.
hm, das gibts auch nur als Memberfunktion, oder kann man das auch global aktivieren?
Ne. Das muss schon auf per-stream-Basis erfolgen.