Я пытался найти, что проблема с этой следующей частью кода. Я написал специальный класс исключений, в котором у меня есть базовый класс для ошибок стека, а затем некоторые классы, вытекающие из него, называются stack_full_error
. У меня есть проблема с компиляцией, хотя, я получаю следующую ошибку.Ошибка ссылки на символ C++
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++;
}
sweet решил проблему, не знал, что вам нужно было определить деструктор, хотя он сделан чистым виртуальным. – starcorn 2010-12-04 15:53:21