catch (out_of_range)- nur wie?
-
Hi,
folgender code:
try { v_polygon.push_back(vertexList.at(i)); index++; } catch (OUT_OF_RANGE) { // etc.Angeblich wird ein out_of_range geworfen, wenn der Zugriff auf den std::vector (steht so in der Beschreibung zum std::vector)
vertexList.at(i)Fehlschlägt. Leider sagt der gcc:
Fehler: expected type-specifier before »out_of_range«
Irgendwas habe ich also vergessen, aber was?
-
catch (const std::out_of_range& e)Die Syntax von catch entspricht in etwa der einer Funktionsdeklaration.
-
warum das &e?
-
by-reference. Damit die Excetion nicht by-value übergeben wird, was eine Kopie bedeuten würde und ja irgendwie schwachsinnig wäre.
-
Hallo
weil das catch nicht nur dazu gedacht ist, eine Exception bestimmten (oder allgemeinen) Types abzufangen, sondern auch mit den Daten (also das was in der Referenz mit der Bezeichnung e steht) etwas zu machen... zum Beispiel eine Situationsangepasste Meldung ausgeben.
bis bald
akari
-
Sag ich doch, es ist wie eine Funktionsdeklaration. Und da du wohl kaum die Exception ändern willst (und deren Fehlertext möglicherweise groß sein kann) nimmst du eine konstante Referenz auf den Exceptiontyp (const&) als Parametertyp.
Das e kannst du dann im catch Block verwenden, z.B. so:catch (const std::out_of_range& e) { std::cerr << e.what (); exit (1); }Das kann dir aber auch jedes Exceptiontutorial zeigen und ein solches solltest du mal lesen.