J'ai essayé de trouver quel est le problème de cette partie de code suivante. J'ai écrit une classe d'exception personnalisée où j'ai une classe de base pour les erreurs de pile, et puis certaines classes qui en dérivent sont appelées stack_full_error
. J'ai un problème pour le compiler, j'ai l'erreur suivante.Erreur de référence de symbole 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
Cela dit quelque chose à propos du destructeur, et j'ai essayé de le réparer, sans succès. Quoi qu'il en soit, j'espère que quelqu'un pourra me dire quel est le problème.
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() {};
};
Et là où j'appelle l'exception pour cette première fois
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++;
}
douce résolu le problème, ne savait pas que vous deviez définir destructeur, mais il est fait virtuel pur. – starcorn