C ++ указывает, что функция класса создает пользовательское исключение

Я пробовал около 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?

0

Решение

Есть ли способ указать, какое исключение вызывает метод в 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");
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]