2009-06-14 12 views
0

Je reçois une référence non définie à une méthode privée dans une classe. Voici un court extrait du code (mais le tout se trouve actuellement dans un fichier source et n'est pas séparé en fichiers en-tête et source).Référence non définie dans le même fichier

#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 juste en dessous

?

Répondre

4

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; 
    } 
} 
1

Le principal problème que je vois est que:

void destroy_tree(node *leaf) 

devrait être:

void btree::destroy_tree(node *leaf) 

De plus il n'y a pas 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; 
}; 
Questions connexes