我有以下功能有枚举。如果按下按钮,我想增加值。
typedef enum {
DATE_TIME,
COORDINATE,
WINDSPEED,
POSITIONTRACK,
DISPAY_PARAMETER,
SET_PARAMETER,
DISPLAY_TYPE_MAX
}DISPLAY_SCREEN_TYPE;
DISPLAY_SCREEN_TYPE display_screen_type=DATE_TIME;
button=check_key();
if(button==RIGHT)
display_screen_type++;
我在编译时收到错误消息。
error: no 'operator++(int)' declared for postfix '++', trying prefix operator instead
error: no match for 'operator++' in '++display_screen_type'
这是我的实际代码语法 CODE discription
答案 0 :(得分:0)
你到底想要完成什么?即使可以在编译器中使用int创建enum
,尝试在screen_type变量上使用增量运算符(++
)也是有意义的吗?如果屏幕类型为DISPLAY_TYPE_MAX
且按下右键,应该会发生什么?
可以强制编译器接受您的enum
/ int
转换,但这样做会使代码更难阅读。
enum
的目的是将变量的值限制为枚举所包含的值。它几乎就像创建一个新的变量类型,并声明该类型仅限于某组值。从这个意义上讲,enum
并不是真正意义上的数学值(如int
),因此在++
上使用switch
并不合理。
作为替代方案,我建议使用{{1}}或只是编写一个函数来执行右键操作。
答案 1 :(得分:0)
不允许枚举值具有算术运算。它是一个数值有限的集合。
虽然你可以在c11中声明枚举的基础类型来操纵它。但是arduino的avr编译器可能不支持它。
您可以将枚举更改为int / byte类型,并将枚举值定义为整数值。
#define DATE_TIME (0)
// other values.
int display_type;