2009-06-14 42 views
0

我得到了一個未定義的對一個類中的私有方法的引用。下面是代碼的一小段代碼(但目前整個事情都在一個源文件中,而不是分爲頭文件和源文件)。undefined reference在同一個文件中

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

編譯器輸出「未定義參考`B樹:: destroy_tree(節點*)」的這一行:

destroy_tree(root); 

但是,這不是函數立即右它下面的定義

回答

4

你destroy_tree超載不作用域B樹的執行缺少B樹::和需要,因爲它是不是類定義中:

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

我能看到的主要問題是:

void destroy_tree(node *leaf) 

應該是:

void btree::destroy_tree(node *leaf) 

也沒有辦法建立一個B樹對象。你應該這樣做:

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

    void destroy_tree(); 

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