Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Правильное наследование std::exception

#cpp #gcc


Пытаюсь написать свой класс исключений

class MathException : std::exception
{
public:
    MathException(std::string &&whatStr) noexcept : whatStr(std::move(whatStr)) { }
    MathException(const std::string &whatStr) noexcept : whatStr(whatStr) { }
    ~MathException() noexcept;

    const char* what() const noexcept override;

private:
    std::string whatStr;
};

const char* MathException::what() const noexcept
{
    return whatStr.c_str();
}

int main()
try
{
    throw MathException("Parse Error");
}
catch(...)
{

}


На что мне компилятор вежливо отвечает:

error: undefined reference to 'typeinfo for MathException'                      
                                                                                  
                      
error: undefined reference to 'MathException::~MathException()'                 
                                                                                  
                      
error: undefined reference to 'vtable for MathException'                        
                                                                                  
                                 
the vtable symbol may be undefined because the class is missing its key function
(see go/missingkeymethod) 

    


Ответы

Ответ 1



Решение оказалось до боли смешное. Надо было всего лишь реализовать деструктор, либо сказать компилятору создать его: ~MathException() noexcept = default;

Комментариев нет:

Отправить комментарий