C++ 枚举增量的运算符重载
我有这个枚举,我只想将该枚举的一个对象增加一个位置C++ 枚举增量的运算符重载,c++,operator-overloading,C++,Operator Overloading,我有这个枚举,我只想将该枚举的一个对象增加一个位置 enum Month { january = 1, february, march, april, may, june, july, august, september, october, november, december }; 对于我的枚举对象Month m,我只想将对象的变量移动一个位置 Month operator++(Month &am
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){
m=静态(m+1);
返回m;
}
以Month&m为参数,我会发现错误,它需要将int作为参数。所以如果我使用“(Month&m,int)”它说它“必须接受零个或一个参数。”我读到如果操作符重载是一个成员函数,则不需要Month&m,所以我删除了它。在那之后,我又遇到了另一个错误:“运算符++”(操作数类型为“月”)不匹配”。我有什么遗漏吗
主要代码:
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;
}
上课日期{
整数y,d,月末;//私有
月m;
公众:
日期(国际年、月、日)
:y(yy),d(dd),m(mm){
}
月和运算符++(月和m){
m=静态(m+1);
返回m;
}
void add_month(){
++m;
}
在评论中,您说:
有什么是我忽略的吗
是的。您是在一个不寻常的地方定义函数的,Date
的定义中。它需要是一个非成员函数
使用名称空间std
enum Month {
january = 1,
february,
march,
april,
may,
june,
july,
august,
september,
october,
november,
december
};
Month& operator++(Month &m) {
m = static_cast<Month>(m + 1);
return m;
}
class Date {
int y, d;
Month m;
public:
Date(int yy, Month mm, int dd) // constructor
: y(yy), d(dd), m(mm) { // member initializer
}
void add_month() {
++m;
}
};
int main()
{
Month m = january;
++m;
enum月{
一月=1,
二月
前进
四月
也许
六月
七月
八月
九月
十月
十一月
十二月
};
月和操作员++(月和月){
m=静态(m+1);
返回m;
}
上课日期{
int y,d;
月m;
公众:
日期(年月日)//
:y(yy),d(dd),m(mm){//成员初始值设定项
}
void add_month(){
++m;
}
};
int main()
{
月份m=一月;
++m;
您正在使用哪个编译器?可以与MS vs14配合使用。请显示您的Main()
。@lakeweb gcc版本6.4.0 20170704(Debian 6.4.0-1)实际上,我还没有使用运算符重载调用任何东西,但我会将其添加到原始问题中。@sS5H我认为lakeweb评论的含义是让您创建一个。@jodag Fixed,这是可能用于解决我的问题的代码第一个函数,Month operator++(Month&m)
,工作文件位于。@lakeweb,一旦OP在ideone.com上发布了MCVE,就很容易看到错误。我们再怎么强调MCVE的重要性也不为过。