C++二叉树类出现函数未定义引用错误,请求排查解决
解决你的二叉树链接错误问题
首先直接点明你遇到的链接错误根源:你在bt类里声明了两个insert重载函数,但只实现了其中带set<string>参数的版本,而测试代码里调用的是无额外参数的insert(string)——链接器找不到这个函数的定义,所以抛出了undefined reference错误。
具体修复步骤
1. 补全缺失的insert函数实现
如果你确实需要无参数的insert重载,就在头文件里添加它的定义,比如可以复用已有的带set参数的版本:
void bt::insert(string val) { // 传入空的set作为默认参数,或者根据你的业务逻辑实现独立的插入逻辑 std::set<std::string> default_inputs; insert(val, default_inputs); }
2. 或者调整代码,删除不必要的重载
如果不需要无参数的insert,直接删掉类声明里的void insert(string val);,同时修改测试代码的调用,传入对应的set参数。
额外的代码坑要注意
除了链接错误,你的代码还有几个潜在问题,提前修复能避免后续崩溃:
- 构造函数里的野指针问题:
你现在的构造函数直接访问root指针,但root没有被初始化,是个野指针,运行时会直接崩溃。修改成这样:bt(string val) { root = new node; root->value = val; root->left = nullptr; // 推荐用C++11的nullptr代替NULL,类型更安全 root->right = nullptr; } printLevelOrder里的变量遮蔽问题:
你写的void printLevelOrder() {node* root; printLevelOrder_DO(root);}里,局部的node* root会覆盖类成员的root,而且这个局部变量未初始化就传给了子函数,会导致未定义行为。改成直接用类的成员变量:void printLevelOrder() { printLevelOrder_DO(root); }
内容的提问来源于stack exchange,提问作者Chris_skelton
相关产品推荐
相关产品推荐

