3 Stimmen

C++ Fehlerausnahme werfen beim Entleeren einer leeren Warteschlange

Ich schreibe eine Implementierung einer Prioritätswarteschlange unter Verwendung von verketteten Listenknoten in C++.

Ich bin neu in der Sprache und würde es wirklich begrüßen, wenn mir jemand helfen könnte, herauszufinden, wie man eine Ausnahme wirft, wenn die pop() Funktion auf eine leere Warteschlange aufgerufen wird.

Ich habe versucht, die try- und catch-Ausnahmehandhabung zu verwenden, aber mein Code generiert weiterhin einen "Segmentationsfehler".

Meine Prioritätswarteschlange ist korrekt implementiert... push(), isEmpty(), size(), clear() funktionieren. pop() funktioniert auch, aber ich möchte eine Ausnahme werfen, wenn der Benutzer einen illegalen Aufruf tätigt.

try {
    if(isEmpty()) {
        throw -1;
    }
}
catch(int n) {
    cout << "FEHLER " << n << ": LISTE IST LEER" << endl;
}

1voto

goji Punkte 6601

Eine Ganzzahl als Ausnahme zu werfen ist in C++ wirklich nicht üblich. Sie sollten wirklich entweder eine neue Ausnahme für die Aufgabe erstellen oder eine der vorhandenen Ausnahmen der std-Bibliothek auswählen, die zur Situation passen könnte.

http://www.java2s.com/Tutorial/Cpp/0120__Exceptions/Throwyourownexceptionclassbasedonruntimeerror.htm

Ja, die Domain sagt Java, aber es handelt sich um ein C++-Tutorial und hat ein Beispiel dafür, wie man eine benutzerdefinierte Ausnahme ableitet von std::runtime_error erstellt.

1voto

Pete Becker Punkte 74051

Du wirfst eine Ausnahme mit einer throw-Anweisung. Es gibt kein try oder catch beteiligt. Es liegt in der Verantwortung des Aufrufers, die Ausnahme abzufangen.

if (isEmpty())
    throw -1;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X