Fangen von Ausnahmen, die von Funktionen der Klasse
Ich versuche zu implementieren der Ausnahmebehandlung in einem workout-tracker-Programm, das ich geschaffen, dass derzeit keine Fehlerprüfung. Ich habe eine Exlist
Klasse behandelt eine verknüpfte Liste eine Reihe von Funktionen, einige wichtige Funktionen, die ich möchte auf add exception handling:
- Update-Liste in Textdatei
- Liste Sortieren nach Datum
- Bearbeiten workout(Suche Liste mit Schlüssel)
- Sie Training löschen(Suche Liste mit der Taste löschen)
- Add workout
Wie würde ich mich über das werfen von Ausnahmen von einer Funktion innerhalb einer Klasse und fangen Sie in int main()
. ich kenne einfache Ausnahme übergabe in den gleichen block, aber ich kann nicht scheinen, um zaubern eine Lösung zu einer Lösung. Meine ideale situation wäre
//in int main, when the user selects add
try
{
WorkoutList.addEx();
}
//other code...
//catch at end of loop and display error
catch(string error)
{
cout << "Error in: addEx..." << error << endl;
}
- Gibt es irgendetwas, was nicht mit dem code arbeiten, die Sie präsentiert?
- Nicht werfen
std::string
Objekte! Sollten Sie werfen nur Objekte von Klassen, die vonstd::exception
. Obwohl Sie werfen kann jeder kopierbar Klasse, fangen random Klassen macht es viel schwieriger festzustellen, was passiert ist. Fangstd::exception const&
und mit einem Blick auf denwhat()
Mitglied gibt zumindest einen Hinweis auf das, was ging auf. - Dies ist, was genau die Ausnahmen sind für! Nur werfen Sie, wo immer, und Sie "bubble-up", bis Sie sind gefangen, zerstören Objekte, die aus dem Umfang, wie Sie gehen.
- Die Funktionen, die Sie aufgelistet, die scheinen, wie Sie werfen sollte, sind diejenigen, die mit text-Dateien und "Training Hinzufügen".
- Ich würde die Formulierung etwas zu
derived from std::runtime_error (or one of its derived classes)
eher alsstd::exception
. Der Grund dafür ist, dass std::runtime_error konstruiert werden können, mit einer Fehlermeldung, während std::exception nicht (es sei denn, es wurde aktualisiert in C++11). - Vereinbart. Die grundlegende gemeinsamkeit ist jedoch, dass die Objekte geworfen werden abgeleitet aus
std::exception
undstd::runtime_error
(oder abgeleitete Klassen davon) ist eine mögliche Wahl.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie eine exception-Klasse erbt von Exception. Zum Beispiel, wenn Sie wollen, es zu werfen, wenn ein falscher Wert Hinzugefügt wird, Sie könnte tun:
Dann, in der
addEx()
Funktion, werfen Sie esFangen und es in der main:
Die Ausnahme geworfen wird Blase, von wo auch immer Sie werfen, bis es gefangen ist. Wenn es nicht abgefangen wird, wird das Programm beenden (potenziell, ohne abwickeln des Stacks (so ist es normalerweise am besten immer fangen Sie die Ausnahmen in main (Kraft-stack unwinding), auch wenn Sie re-throw).