为什么这个代码给出错误消息“智能感知:这个操作符的功能太多的参数”运营商+超载问题
int operator+(PerfectNum a,PerfectNum b)
{
return (a.thenum+b.thenum);
}
PerfectNum是一个普通班,并thenum是一个int。 此方法在课程中。
为什么这个代码给出错误消息“智能感知:这个操作符的功能太多的参数”运营商+超载问题
int operator+(PerfectNum a,PerfectNum b)
{
return (a.thenum+b.thenum);
}
PerfectNum是一个普通班,并thenum是一个int。 此方法在课程中。
你正在将它定义为一个成员函数,对吧?
在这种情况下,左侧是简单*this
:
// .h
class PerfectNum
{
public:
int operator+(PerfectNum other) const;
};
// .cpp
int PerfectNum::operator+(const PerfectNum &other) const
{
return this->thenum + other.thenum;
}
错误的种类。运营商应该是一个免费的功能,可能是一个朋友。如果它是一个成员,它应该是const。该参数应该是一个常量引用。语法错误 - 实现缺少返回类型。谁在投票这个东西? – 2011-06-13 22:54:23
糟糕。你是对的,这是非常可怕的。昨天我有一个相当紧张的工作日,我需要摆脱它,但显然我留下了一些我的知识:-) – 2011-06-14 14:29:20
另外:我看到没有理由,这不能成为一个成员函数。我可能会错过一些知识。请*帮助我,而不是仅仅批评一切,如果是这样的话。我认为它应该是一个成员函数,因为它可以解释为什么有太多的参数*(根据OP的错误信息)。 – 2011-06-14 14:34:00
你需要让你的运营商一个非成员函数。
+1 Sheesh。由于所有的答案都是错误的答案,只有一个答案是正确的,所以我觉得不得不在这里投票。还有其他所有正确回答此问题的人。 – 2011-06-14 00:26:26
对于为什么它不应该是成员函数,我可以有一个很好的解释吗?我被教导说,当你想限制它成为左手边的“PerfectNum”时是可以的;因为OP只希望它位于两个'PerfectNum'对象之间,所以我认为成员函数是要走的路。 – 2011-06-14 14:32:00
运算符+应该是非成员函数。返回类型应该是const对象。如果你有operator = defined,那么最好还是定义operator + =。所以,你可以用operator + =来实现operator +。
const PerfectNum operator+(const PerfectNum& lhs, const PerfectNum& rhs)
{
PerfectNum ret(lhs);
ret += rhs;
return rhs;
}
当声明为类方法时,重载操作符+肯定不应该是朋友/自由函数。这里有一个非常简单的实现:
class PerfectNum {
public:
PerfectNum(int);
PerfectNum(const PerfectNum&);
PerfectNum operator+(const PerfectNum&) const;
private:
int mNumber;
};
PerfectNum PerfectNum::operator+(const PerfectNum& rhs) const
{
return PerfectNum(this->mNumber + rhs.mNumber);
}
这不是类方法吗?如果你使它成为PerfectNum的一种方法,那么你只需要一个参数,并使用“this.thenum”作为另一个参数。 – sleeves 2011-06-13 22:28:00
这是你从编译器得到的确切错误信息吗?函数'int operator +(PerfectNum,PerfectNum)'返回太多参数? – Oswald 2011-06-13 22:28:52
没有编译器会产生这样的错误信息。在这里发布编译器输出时请使用复制和粘贴。 – 2011-06-13 22:29:57