Ich habe über 20 Versuche versucht & zahlreiche Seiten für die letzten 2 Stunden abgelesen und kann nicht herausfinden, was ich falsch hier tun:C++ Klasse Funktion Geben Wirft Angepasste Exception
#pragma once
#include <exception>
using namespace std;
class EmptyHeap : public exception {
public:
virtual const char* what() const throw()
{
return "The heap is empty!";
}
};
dann in der Heap-Klasse, eine öffentliche Methode:
void remove() throw()//EmptyHeap
{
if (isEmpty())
{
EmptyHeap broken;
throw broken;
}
...
Dieser Code funktioniert, aber der Original-Header war:
void remove() throw EmptyHeap;
Gibt es eine Möglichkeit zu spezifizieren, welche Ausnahme eine Methode in C++ wirft, oder ist das nur eine Java-Sache?
[Die korrekte Syntax] (http://en.cppreference.com/w/cpp/language/except_spec) ist 'throw (EmptyHeap)' (beachten Sie die Klammern). Beachten Sie außerdem, dass Ausnahmespezifikationen veraltet sind. Lass es einfach. –
[C++ Ausnahme Spezifikation ersetzen] (http://stackoverflow.com/q/14609329/669576) –
Beachten Sie, dass dies sehr wahrscheinlich keine Ausnahme überhaupt sein sollte. Wie würden Sie von einer "EmptyHeap" -Ausnahme "erholen"? Es ist ein Programmierfehler, um etwas aus einem leeren Heap zu entfernen, also wäre es richtig, eine Vorbedingung für 'isEmpty' hinzuzufügen. Das bedeutet, dass Sie die Vorbedingungen für Benutzer der Klasse dokumentieren und ein 'assert (! IsEmpty());' in den Code einfügen. –