Я пытался найти, в чем проблема с этой следующей частью кода. Я написал собственный класс исключений, в котором у меня есть базовый класс для ошибок стека, а затем некоторые классы, производные от него, один из которых называется stack_full_error
.
У меня возникли некоторые проблемы при компиляции, но я получаю следующую ошибку.
Undefined first referenced
symbol in file
stack_error::~stack_error() /var/tmp//ccFwZ5Kd.o
ld: fatal: Symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status
Это что-то говорит о деструкторе, и я пытался кое-что исправить, но безуспешно. Во всяком случае, я надеюсь, что кто-то может сказать мне, в чем проблема.
class stack_error : public exception
{
public:
stack_error(string const& m) throw()
: exception(), msg(m) {};
virtual ~stack_error() throw() =0;
virtual const char* what() const throw()
{
return msg.c_str();
}
private:
string msg;
};
class stack_full_error : public stack_error
{
public:
stack_full_error() throw()
: stack_error("Exception: stack full") {};
~stack_full_error() throw() {};
};
И вот здесь я впервые называю исключение
template <class T>
void Stack<T>::push(T i)
{
if(is_full())
throw stack_full_error();
this->first = new Node<T>(this->first, i);
amount++;
}