同一文件中未定义的引用

Posted

技术标签:

【中文标题】同一文件中未定义的引用【英文标题】: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);

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

【问题讨论】:

【参考方案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;
;

【讨论】:

以上是关于同一文件中未定义的引用的主要内容,如果未能解决你的问题,请参考以下文章

强制 GCC 通知共享库中未定义的引用

如何解决在开发 C++ 中未定义的对 readimagefile 的引用错误 [重复]

与使用名称空间的外部库链接时,如何解决 C 中未定义的引用?

多项目 sbt 插件中未定义设置的引用

在 Eclipse IDE 中未定义对“crypt”的引用

带有devc ++的opencv中未定义的引用[重复]