вернуть целое число из определенного исключения в C ++ - PullRequest
0 голосов
/ 06 сентября 2018

Я хочу определить исключение, которое возвращает int. Мой код приведен ниже. Это показывает ошибку.

class BadLengthException : public exception {
    public:
        int x;

    BadLengthException(int n){
        x =n;
    }

    virtual const int what() const throw ()  {
        return x;
    }
};

Ошибка:

solution.cc: 12: 22: ошибка: конфликтный тип возврата, указанный для ‘Виртуальное const int BadLengthException :: what () const’ виртуальный const int what () const throw () { ^ ~~~ В файле из / usr / include / c ++ / 7 / исключение: 38: 0, из / usr / include / c ++ / 7 / ios: 39, из / usr / include / c ++ / 7 / ostream: 38, из / usr / include / c ++ / 7 / iostream: 39, из solution.cc:1: /usr/include/c++/7/bits/exception.h:69:5: ошибка: переопределение ‘виртуальное const char * std :: exception :: what () const ’ what () const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_USE_NOEXCEPT;

1 Ответ

0 голосов
/ 06 сентября 2018

exception::what() возвращает const char*, вы не можете это изменить. Но вы можете определить другой метод для возврата int, например:

class BadLengthException : public std::length_error {
private:
    int x;
public:
    BadLengthException(int n) : std::length_error("bad length"), x(n) { }
    int getLength() const { return x; }
};

А затем назовите это в ваших catch заявлениях, например:

catch (const BadLengthException &e) {
    int length = e.getLength();
    ...
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...