重载运算符时出错=
Error while Overloading operator =
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
}
我更喜欢第二种形式,因为它更简单、更容易理解。
两者之间的行为差异可以在这里找到:重载运算符:常量与非常量返回类型:性能有什么不同?
相关文章:
- 在 myVector 类中重载运算符 + 时出错
- 使用运算符调用 void 函数时出错<set>
- 通过 [] 运算符访问unordered_map时出错
- 在重载 + 和 - 运算符时出错
- 重载运算符时出错<在 sf::Vector 中
- 将运算符<<与隐式转换的非基本数据类型一起使用时出错
- Rcpp/C++/R:比较日期时间矢量与日期时间时出错(错误:"运算符>"的不明确重载)
- 令牌之前缺少二进制运算符 "#" 当 #define 在 #if 内时出错
- 在运算符中将联合作为参数传递时出错<<
- 迭代器关系运算符出错(带单独链接和迭代器的自定义哈希表)
- 尝试重载模板类友元<<运算符时出错
- 使用 getline 重载 istream 运算符>> 会出错
- 灵气:用期望运算符替换序列时出错
- 在类外部定义显式运算符 bool() 时出错
- 擦除矢量中的对象时出错.如何将移动作业运算符添加到我的类中
- 过载运算符出错>>
- 在使用C (Microsoft vs)中使用指针和新运算符时出错
- 运算符重载时出错(错误:"运算符<<不匹配(操作数类型为"std::basic_ostream<char>"和"const char [2]")
- static_cast为int时删除布尔运算符时出错
- 为什么我会出错?运算符[]过载