我正在获取类中一个私有方法的未定义引用。这是代码的一小段(但目前整个内容都在一个源文件中,而不是分为头文件和源文件)。
#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;
}
编译器为此行输出“对btree :: destroy_tree(node *)”的未定义引用:
destroy_tree(root);
但不是紧接在它下面的那个函数的定义?
答案 0 :(得分:4)
您的destroy_tree重载不限于btree。实现缺少btree ::并且是必需的,因为它不在类定义中:
void btree::destroy_tree(node * leaf)
{
if(leaf!=NULL)
{
destroy_tree(leaf->left);
destroy_tree(leaf->right);
delete leaf;
}
}
答案 1 :(得分:1)
我能看到的主要问题是:
void destroy_tree(node *leaf)
应该是:
void btree::destroy_tree(node *leaf)
此外,无法创建btree对象。你应该这样做:
class btree
{
public:
btree();
~btree();
void destroy_tree();
private:
void destroy_tree(node *leaf);
node *root;
};