同一文件中的未定义引用

时间:2009-06-14 00:56:52

标签: c++ reference undefined

我正在获取类中一个私有方法的未定义引用。这是代码的一小段(但目前整个内容都在一个源文件中,而不是分为头文件和源文件)。

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

但不是紧接在它下面的那个函数的定义?

2 个答案:

答案 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;
};