我知道有很多关于运算符重载的问题,但是我无法使用我的代码来处理我找到的任何示例。是的,我看过 this link,但我仍然无法理解这一点。
我试图重载前缀运算符,但是我得到一个错误,说postfix需要一个int。我不是要修改后缀运算符。 我有一个.h文件和一个.cpp文件。在我的.h文件中,我有类似的东西:
class X{
public:
/* ... declarations of X ... */
X& operator--(X& x);
};
在我的.cpp文件中,我有类似的东西:
#include "X.h"
namespace X{
X& X::operator--(X& x){/*...*/}
}
有谁能告诉我我做错了什么?
答案 0 :(得分:2)
前缀--
运算符不带参数。其定义如下:
public:
/* ... declarations of X ... */
X& operator--();
};
同样在实施时:
#include "X.h"
namespace X {
X& X::operator--() {/*...*/}
}
答案 1 :(得分:1)
X& operator--(X& x);
必须:
X& operator--();
背景:编译器发现您已为--
运算符提供了参数。 --
的后缀版本需要一个参数,所以它认为你的意思是那个。但该参数的类型必须按惯例int
。所以它确切地告诉你:postfix 'X& X::operator--(X&)' must take 'int' as its argument
。
编译器可以告诉你类似prefix 'X& X::operator--(X&)' must not take any argument
的内容。但是,哦,好吧。这就是它的方式。生成任何诊断消息都足以符合C ++标准。