【发布时间】:2017-08-09 02:32:37
【问题描述】:
我有这个枚举,我只是想将该枚举的一个对象增加一个位置。
enum Month {
january = 1,
february,
march,
april,
may,
june,
july,
august,
september,
october,
november,
december
};
对于我的枚举对象 Month m,我只想将对象的变量移动一个位置。
Month operator++(Month &m) {
m = static_cast<Month>(m + 1);
return m;
}
以 Month &m 作为参数,我得到错误,它需要将 int 作为参数。因此,如果我执行“(Month &m, int)”,则表示它“必须接受零个或一个参数”。我读到如果您的运算符重载是成员函数,则不需要 Month &m,因此我将其删除。之后,我又收到一个错误:“'operator++' 不匹配(操作数类型为'Month')”。有什么我遗漏的吗?
主要代码:
class Date {
int y, d, month_end; // private
Month m;
public:
Date(int yy, Month mm, int dd)
: y(yy), d(dd), m(mm) {
}
Month& operator++(Month &m) {
m = static_cast<Month>(m + 1);
return m;
}
void add_month() {
++m;
}
【问题讨论】:
-
您使用的是哪个编译器?适用于 MS vs14。请出示您的
Main( )。 -
@lakeweb gcc 版本 6.4.0 20170704 (Debian 6.4.0-1) 我实际上并没有使用运算符重载在 main 中调用任何东西,但我会将它添加到原始问题中。
-
@sS5H 我认为lakeweb 评论的含义是让您创建一个Minimal, Complete, and Verifiable example。
-
@jodag 已修复,这是可能用于解决我的问题的代码
-
第一个函数
Month operator++(Month& m)工作文件位于ideone.com/AoWME2。