【问题标题】:Invalid operand error in overloaded operator重载运算符中的无效操作数错误
【发布时间】:2015-01-17 22:39:25
【问题描述】:

所以我真的很困惑为什么我会收到这个无效的操作数错误。我有两个班级,classA 和 ClassB。 ClassB 包含三个 ClassA 指针。 ClassA operator+= 已被重载如下:

ClassA& ClassA::operator+=(const ClassA& rhs)
{
    (*this).dataMem += rhs.dataMem;
    return *this;
}

而且一切正常。当我在 ClassB 中重载 operator+= 和 operator+ 时,我的问题就出现了。操作员应该只对其中的 ClassA 对象执行 + 操作。

ClassB& ClassB::operator+=(const ClassB& rhs)
{
    (*this).mClassA + rhs.mClassA;
    return *this;
}

我很困惑,因为我在 ClassB 中使用完全相同的格式和调用重载了其他运算符,但是在重载 + 和 += 运算符时我只收到无效操作数错误。

这是我收到的错误: ClassB.cpp:93:错误:ClassA* 和 ClassA* const 类型的无效操作数到二元运算符+。

任何形式的帮助或建议将不胜感激。谢谢!

【问题讨论】:

  • B 类中的 mClassA 是否定义为常量?需要看它的声明
  • 不,它没有定义为常量。它似乎不需要是一个常数,不是吗?它是一个指向 ClassA 对象的指针。
  • 所以你要添加两个指针?对吗?
  • 那些不是对象,它们是指针,你不能添加指针。
  • 我是!这为我解决了问题! *((*this).mClassA) += *(rhs.mClassA) 似乎正在工作,或者正在编译。谢谢你的帮助!我真的很感激。

标签: c++ operator-overloading operand


【解决方案1】:
void ClassB::operator+=(const ClassB& rhs)
{
    (*this).mClassA + rhs.mClassA;
}

这个函数接受一个ClassB类型的参数,所以调用它时不会调用ClassA的operator +

void ClassB::operator+=(const ClassA& rhs)
{
    (*this).mClassA + rhs.mClassA;
}

它会起作用的

【讨论】:

  • 有点晚了,因为它正在我的机器上测试它:)
  • 这不是执行 mClassB += mClassA 之类的事情
  • 似乎只是取消引用 (*this).mClassA 和 rhs.mClassA 工作
猜你喜欢
  • 2021-03-18
  • 2019-05-09
  • 2013-03-10
  • 1970-01-01
  • 2014-07-27
  • 2019-07-21
  • 1970-01-01
  • 2016-09-09
  • 2014-05-02
相关资源
最近更新 更多