【问题标题】:undefined reference within the same file同一文件中未定义的引用
【发布时间】:2009-06-14 00:56:52
【问题描述】:

我得到一个对类中一个私有方法的未定义引用。这是代码的简短 sn-p(但目前整个内容都在一个源文件中,而不是分为头文件和源文件)。

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

但是该函数的定义不是就在它的正下方吗?

【问题讨论】:

    标签: c++ reference undefined


    【解决方案1】:

    您的 destroy_tree 重载不限于 btree。该实现缺少 btree:: 并且是必需的,因为它不在类定义中:

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

    【讨论】:

      【解决方案2】:

      我能看到的主要问题是:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-28
        • 1970-01-01
        • 2012-11-19
        • 2011-08-31
        • 2015-06-08
        • 2014-11-21
        • 1970-01-01
        • 2014-07-22
        相关资源
        最近更新 更多