2009-06-14 10 views
0

Ich bekomme einen undefinierten Verweis auf eine private Methoden in einer Klasse. Hier ist ein kurzer Ausschnitt des Codes (aber die ganze Sache ist derzeit in einer Quelldatei und nicht in Kopf- und Quelldateien aufgeteilt).undefined Referenz innerhalb der gleichen Datei

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

Der Compiler gibt „undefiniert Bezugnahme auf` btree :: destroy_tree (node ​​*)‘für diese Linie:

destroy_tree(root); 

ist aber nicht die Definition dieser Funktion sofort direkt darunter

?

Antwort

4

Ihre destroy_tree Überlastung ist nicht auf BTree scoped die Umsetzung btree fehlt :: und erforderlich ist, da es nicht innerhalb der Klassendefinition ist.

void btree::destroy_tree(node * leaf) 
{ 
    if(leaf!=NULL) 
    { 
    destroy_tree(leaf->left); 
    destroy_tree(leaf->right); 
    delete leaf; 
    } 
} 
1

Das Hauptproblem ich sehen kann, ist, dass:

void destroy_tree(node *leaf) 

sein sollte:

void btree::destroy_tree(node *leaf) 

Auch gibt es keine Möglichkeit ein btree Objekt zu erstellen. Sie sollten dies vielleicht tun:

class btree 
{ 
public: 
    btree(); 
    ~btree(); 

    void destroy_tree(); 

private: 
    void destroy_tree(node *leaf); 
    node *root; 
};