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?

Était-ce utile?

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;
};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top