Throw-Try-Catch Problem
-
Hi Leutz,
Wollte fragen, ob es eine Möglichkeit gibt bei throw catch Statements mehrere Exceptions vom gleichen Typ zb. Int zu werfen ....
Habs in dem kleinen Prog hier denk ich mal ziemlich hässlich gelöst. Geht das auch schöner? Hier im konkreten Fall beispielsweise mit zwei Int Werten, die geworfen werden.....ich frag mich nur wie dann das catch statement die zwei auseinander halten soll. Grüße#include <iostream> #include <vector> #include <string> #include <cmath> #include <stdexcept> using namespace std; int main(){ try{ vector <int> addierer; int zahlenwerte= 0; int speicherwert = 0; int aufaddierer=0; int ergebnis=0; char beender = ' '; cout << "Bitte geben Sie eine beliebige Anzahl von Zahlenwerten ein (Nur Ganzzahlige Werte!) " << '\n'; cout << '\n'; while(cin >> zahlenwerte && beender != '|'){ // Speichert die vom Benutzer eingebenen Elemente addierer.push_back(zahlenwerte); } cout << "Danke fuer ihre Eingabe! " << '\n'; cout << "Sie haben " << addierer.size() << " Elemente eingebeben!" << '\n'; cin.clear(); // Löscht den Buffer cin.ignore(); cout << "Wie viele Elemente wollen sie addieren?" << endl; cin >> speicherwert; if(!cin){ throw(1.2); } if(speicherwert>addierer.size()){ // Prüft, ob die Eingabe des benutzers korrekt ist throw(1); } cout << "Die ersten " << speicherwert << " Elemente werden addiert .." << endl; for(int i=0; i<speicherwert; i++){ // Addiert die Anzahl der gewünschen Elemente aufaddierer+=addierer[i]; } ergebnis=aufaddierer; cout << "Die Summer lautet: " << ergebnis << " !" << endl; } catch(int){ cerr << "Error: Input greater than Elements of Vector Container!" << '\n'; cerr << "Exiting programm..." << '\n'; } catch(double){ cerr << "Error: Please enter a correct integer value for calculation !" << '\n'; } catch (...){ cerr << "Unexpected Error ocurred !" << endl; } cin.clear(); cin.ignore(); cin.get(); }
-
H4rdstyl3 schrieb:
Hi Leutz,
Wollte fragen, ob es eine Möglichkeit gibt bei throw catch Statements mehrere Exceptions vom gleichen Typ zb. Int zu werfen ....
Äh.. natürlich. Das wäre doch total sinnlos anders.

Normalerweise wirft man std::runtime_error oder std::logic_error oder etwas Äquivalentes.
z.B.#include <stdexcept> int main() { try { throw std::runtime_error("Waahhh alles kaputt"); } catch (const std::runtime_error& e) { std::cerr << "Runtime error: " << e.what() << '\n'; } }
-
Ich glaube der Threadersteller meint dies (was selbstverständlich auch geht, wäre doch total sinnlos anders.):
#include <stdexcept> #include <ctime> #include <iostream> int main() { try { if (std::time(0) % 2) throw std::runtime_error("Waaaahhh!"); else throw std::runtime_error("Rabäääähhh!"); } catch (const std::runtime_error& e) { std::cerr << "Runtime error: " << e.what() << '\n'; } }
-
Wenn es nicht darum geht, den Umgang mit Exceptions zu erlernen, dann würde ich hier gar keine Exceptions benutzen.
-
SeppJ schrieb:
Ich glaube der Threadersteller meint dies (was selbstverständlich auch geht, wäre doch total sinnlos anders.):
Ja genau das mein ich. Bis jetzt wurde im Buch halt immer nach dem gearbeitet wie ich es oben gemacht hab (also zb ein integer geworfen etc..)
Dankö

-
Du darfst schmeißen was* und so viel du möchtest. Gerne auch mehrere verschiedene Integer. Exceptionsklassen und mit Einschränkungen Integer sind eben das, was am meisten Sinn macht.
*: Ein paar kleine Einschränkungen gibt es natürlich schon. Faustregel: Was man per return aus einer Funktion zurück geben kann, das kann man auch werfen.
-
Könnt ihr mir ein mittelmäßig großes (oder eher kleines?) Open-Source-Projekt (nicht bloß eine Bibliothek) empfehlen, das einen guten Einsatz von Exception-Handling veranschaulicht? Ich bin gerade nach längerer Zeit der sturen Entwicklung in einem Code-Quality-Pass und wollte mich mal um solche Dinge kümmern, um die ich mich eigentlich schon eher hätte kümmern sollen.
Viele Grüße,
deci
-
geht ja auch:
... catch(int &e) { if(e == 2) ... else if(e == 3) ... ... }