首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

枚举运算符重载,该怎么处理

2012-07-22 
枚举运算符重载C/C++ code#include iostreamusing namespace::stdenum Day {sun,mon,tue,wed,thu,fri,s

枚举运算符重载

C/C++ code
#include <iostream>using namespace::std;enum Day {sun,mon,tue,wed,thu,fri,sat};Day& operator++(Day& d){    return d = (sat == d) ? sun : Day(d+1);}int main(){    Day day = tue;    day++;    cout<<day<<endl;}


xiaowen@hello-laptop:~/test/test-c/11$ g++ 237.cpp 
237.cpp: 在函数‘int main()’中:
237.cpp:13:5: 错误: 没有为后缀‘++’声明‘operator++(int)’ [-fpermissive]

请问一下错误出在那里?

[解决办法]
枚举里的值都是常量,必须初始值,如果用++改变他们的值显然是不行的
[解决办法]
这重载的哪里的Day类型的++运算符

 作用域运算符在哪。如果加上了,声明又在哪。

 后缀式的++运算符的重载形式也不是这样的。
 应该是operator++(int)

 枚举类型貌似不能重载运算符吧。知识有限。答不上来
[解决办法]
仔细看了下是可以的,但是你的重载是++x,并没有重载x++,所以正确代码如下
C/C++ code
#include <iostream>using namespace::std;enum Day {sun,mon,tue,wed,thu,fri,sat};Day& operator++(Day& d){    return d = (sat == d) ? sun : Day(d+1);}int main(){    Day day = tue;    ++day;    cout<<day<<endl;} 

热点排行