同一文件中未定义的引用
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;
;
【讨论】:
以上是关于同一文件中未定义的引用的主要内容,如果未能解决你的问题,请参考以下文章
如何解决在开发 C++ 中未定义的对 readimagefile 的引用错误 [重复]