【问题标题】:Trying to overload a Binary Search Tree assignment operator试图重载二叉搜索树赋值运算符
【发布时间】:2023-03-07 02:35:01
【问题描述】:

我正在尝试重载和赋值运算符,但程序不断崩溃,这是我尝试过的。赋值运算符在第 238 行重载。Code 任何帮助都会得到帮助

【问题讨论】:

  • BinaryTree *newTree; newTree->insert(0); 你期望这会做什么? newTree 是一个不确定的指针,您在声明后 立即 取消引用。你根本不应该在那里使用指针,我建议你阅读The Rule of Three/Five/Zero,以及copy/swap idiom
  • @WhozCraig 我希望它向类中包含的 TreeNode 添加一个节点,这不是它应该做的吗?我也刚刚尝试过 BinaryTree newTree;新树.插入(0);但它也不起作用。
  • 按照我的建议做,并阅读我之前发布的两个链接。
  • @CPlusJavaPlusZ 尝试重载二叉搜索树赋值运算符 -- 我建议你先编写复制构造函数。一旦你编写了复制构造函数,那么赋值运算符实际上就是一堆std::swap 和一个return 语句。

标签: c++ operator-overloading assignment-operator


【解决方案1】:

老实说,您可能很幸运,该错误出现了。

BinaryTree *newTree; newTree->insert(0);

创建一个指向 BinaryTree 的指针,该指针将指向任何内容,然后使用 -> 运算符调用取消引用它,这会导致 c++ 中的未定义行为。

假设您的函数的其他所有内容都是正确的(包括其他函数的实现),那么正确的方法将是基于您当前的代码(注意该函数返回一个引用):

BinaryTree & BinaryTree::operator=(const BinaryTree &myTree)
{
    this->insert(0);
    this->FillTree(*this, myTree.root);
    return *this;
}

但是,我发现您的代码中很可能存在其他错误,您应该听取其他评论者的建议并首先实现复制构造函数。

【讨论】:

    猜你喜欢
    • 2013-11-21
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多