You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 18:22:48