运算符重载混乱

时间:2015-10-04 15:59:25

标签: c++ operator-overloading decrement unary-operator

我知道有很多关于运算符重载的问题,但是我无法使用我的代码来处理我找到的任何示例。是的,我看过 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){/*...*/}
}

有谁能告诉我我做错了什么?

2 个答案:

答案 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 ++标准。