référence non définie dans le même fichier
Question
Je reçois une référence non définie à une des méthodes privées dans une classe. Voici un court extrait du code (mais l'ensemble est actuellement dans un fichier source et non séparé en fichiers d'en-tête et source).
#include <iostream>
using namespace std;
struct node
{
int key_value;
node *left;
node *right;
};
class btree
{
node *root;
btree();
~btree();
void destroy_tree(node *leaf);
public:
void destroy_tree();
};
btree::btree()
{
root = NULL;
}
btree::~btree()
{
destroy_tree();
}
void btree::destroy_tree()
{
destroy_tree(root);
}
void destroy_tree(node *leaf)
{
if(leaf!=NULL)
{
destroy_tree(leaf->left);
destroy_tree(leaf->right);
delete leaf;
}
}
int main()
{
return 0;
}
Les sorties du compilateur « undefined reference to` btree :: destroy_tree (noeud *) » pour cette ligne:
destroy_tree(root);
mais n'est pas la définition de cette fonction immédiatement à droite en dessous?
La solution
Votre surcharge destroy_tree n'est pas à scope btree. La mise en œuvre manque btree :: et est nécessaire car il est pas dans la définition de la classe:
void btree::destroy_tree(node * leaf)
{
if(leaf!=NULL)
{
destroy_tree(leaf->left);
destroy_tree(leaf->right);
delete leaf;
}
}
Autres conseils
Le principal problème que je vois est que:
void destroy_tree(node *leaf)
devrait être:
void btree::destroy_tree(node *leaf)
En outre il n'y a aucun moyen de créer un objet btree. Vous devriez peut-être faire ceci:
class btree
{
public:
btree();
~btree();
void destroy_tree();
private:
void destroy_tree(node *leaf);
node *root;
};