重载运算符时出错=

Error while Overloading operator =

本文关键字:出错 运算符 重载      更新时间:2023-10-16

Iv构建了一个名为layerOneTree的redBlack树,现在我想为它重载operator=,但我不知道语法。

const layerOneTree& operator =(const layerOneTree &rhs); //in layerOneTree.h

实现:

layerOneTree& layerOneTree::operator= (const layerOneTree &rhs)//ERROR
{
if (this != &rhs) // if not self assignment
{
    reclaimMemory(m_root->rChildPtr); // clear its memory
    m_root->rChildPtr = theLeaf;
    m_root->rChildPtr = clone(rhs.m_root->rChildPtr);
}
return *this; // return current tree object
}

我知道layerOneTree* layerOneTree::operator=有问题,但我不知道如何解决。

编辑:当我在const layerOneTree& operator =(const layerOneTree &rhs);中省略const时,一切都可以,但我正试图这样写代码。正如您在第43行中看到的,定义是const。为什么那个代码有效而我的代码无效?

成员函数的定义和声明必须匹配。解决方案是使两者返回相同类型的变量:

const layerOneTree& operator =(const layerOneTree &rhs); //in layerOneTree.h

const layerOneTree& layerOneTree::operator= (const layerOneTree &rhs)
{// Code
}

或:

layerOneTree& operator =(const layerOneTree &rhs); //in layerOneTree.h

layerOneTree& layerOneTree::operator= (const layerOneTree &rhs)
{// Code
}

我更喜欢第二种形式,因为它更简单、更容易理解。

两者之间的行为差异可以在这里找到:重载运算符:常量与非常量返回类型:性能有什么不同?