运算符重载混乱
Operator overloading confusion
我知道有很多关于运算符重载的问题,但我无法让我的代码与我找到的任何示例一起工作。是的,我已经看过 this link,但我仍然无法理解这一点。
我试图只重载前缀运算符,但我收到一条错误消息,提示后缀需要一个 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){/*...*/}
}
谁能告诉我哪里做错了?
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++标准。
前缀 --
运算符不带参数。它的定义应该如下:
public:
/* ... declarations of X ... */
X& operator--();
};
实施时也类似:
#include "X.h"
namespace X {
X& X::operator--() {/*...*/}
}
我知道有很多关于运算符重载的问题,但我无法让我的代码与我找到的任何示例一起工作。是的,我已经看过 this link,但我仍然无法理解这一点。
我试图只重载前缀运算符,但我收到一条错误消息,提示后缀需要一个 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){/*...*/}
}
谁能告诉我哪里做错了?
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++标准。
前缀 --
运算符不带参数。它的定义应该如下:
public:
/* ... declarations of X ... */
X& operator--();
};
实施时也类似:
#include "X.h"
namespace X {
X& X::operator--() {/*...*/}
}