Как правильно переопределить метод what() в собственном классе исключений?
Нужно создать класс исключений, в котором переопределить виртуальную функцию what(). Компилятор выдает следующее сообщение: "объявленная с использованием ключевого слова Override функция-член не переопределяет член базового класса".
class incompatible_dim_exception : public std::exception
{
private:
const char* name;
public:
incompatible_dim_exception(const char* m_name) : name(m_name){};
const char* what() override{
return name;
}
};
Ответы (3 шт):
Автор решения: Harry
→ Ссылка
Попробуйте переопределить ее так, как указано в стандарте:
const char* what() const noexcept override;
Автор решения: вася
→ Ссылка
Укажите правильное определение:
const char* what() const noexcept override {
return name;
}
Автор решения: user7860670
→ Ссылка
В этом случае правильнее будет не переопределять what, а наследовать от std::runtime_error, которая из коробки поддерживает хранение и отдачу некоторого текста. Также это позволит избавиться от проблем с потенциальныv протуханием буфера, на который указывает m_name:
#include <stdexcept>
class incompatible_dim_exception : public ::std::runtime_error
{
public: explicit
incompatible_dim_exception(char const * const psz_name) : runtime_error{psz_name}{}
};