Я пробовал около 20 попыток & прочитайте множество страниц за последние 2 часа и не можете понять, что я делаю не так здесь:
#pragma once
#include <exception>
using namespace std;
class EmptyHeap : public exception {
public:
virtual const char* what() const throw()
{
return "The heap is empty!";
}
};
Затем в классе кучи открытый метод:
void remove() throw()//EmptyHeap
{
if (isEmpty())
{
EmptyHeap broken;
throw broken;
}
...
Этот код работает, но оригинальный заголовок был:
void remove() throw EmptyHeap;
Есть ли способ указать, какое исключение вызывает метод в C ++, или это просто Java?
Есть ли способ указать, какое исключение вызывает метод в C ++, или это просто Java?
Да, есть, и да, это Java-вещь, которая крайне нежелательна в любой программе на С ++. Если функция может генерировать исключение, просто оставьте спецификацию исключения пустой. Если нет, используйте noexcept
(> = c ++ 11) или throw()
(< C ++ 11)
Кроме того, вы можете сильно помочь себе, извлекая любое пользовательское исключение из std::runtime_error
или же std::logic_error
(или любые другие стандартные ошибки).
например
#include <stdexcept>
// this is literally all you need.
struct EmptyHeap : std::logic_error {
// inherit constructor with custom message
using logic_error::logic_error;
// provide default constructor
EmptyHeap() : logic_error("The heap is empty") {}
};
Теперь добавьте либо:
throw EmptyHeap();
или с пользовательским сообщением:
throw EmptyHeap("the heap is really empty");
Других решений пока нет …