C++二叉树赋值运算符重载报错:operator!=无匹配
解决二叉树赋值运算符重载的
operator!=错误 首先得帮你理清问题的根源:
this是指向当前intBst对象的指针(类型为intBst*),而otherTree是传入的const左值引用(类型为const intBst&),直接用!=比较这两个不同类型的操作数,编译器找不到匹配的运算符重载,所以才会报错。
修正方法很简单:
把判断条件里的otherTree改成取地址的&otherTree,让两边都是指针类型,就能正确判断是否为同一个对象了。另外还要注意代码里的一个小笔误:root == nullptr是比较操作,应该改成赋值操作root = nullptr,否则这行代码根本不会修改root的值。
修正后的完整代码如下:
const intBst& intBst::operator=(const intBst& otherTree) { if(this != &otherTree) { // 这里改成&otherTree if(root != nullptr) destroy(root); if(otherTree.root == nullptr) root = nullptr; // 这里改成赋值= else copyTree(root, otherTree.root); } return *this; }
关于函数声明的疑问:
你的函数声明const intBst& operator=(const intBst&);完全符合C++赋值运算符重载的标准规范,不需要修改。哪怕是模板类设计,这个声明形式也能适配不同的模板参数类型,当前用于整数类型完全没问题。
内容的提问来源于stack exchange,提问作者thedafferg
相关产品推荐
相关产品推荐

