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 von std::exception. Obwohl Sie werfen kann jeder kopierbar Klasse, fangen random Klassen macht es viel schwieriger festzustellen, was passiert ist. Fang std::exception const& und mit einem Blick auf den what() 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 als std::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 und std::runtime_error (oder abgeleitete Klassen davon) ist eine mögliche Wahl.

Schreibe einen Kommentar