按下按钮时增加枚举值
Posted
技术标签:
【中文标题】按下按钮时增加枚举值【英文标题】:increment enum value when button pressed 【发布时间】:2014-03-05 05:16:42 【问题描述】:我有下面的函数有枚举。如果按下按钮,我想增加值。
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
【问题讨论】:
当然。枚举不是定义了算术运算的类型。您可以从 int 显式转换为 int,但这很丑。 如何将枚举声明为具有上述值的 int 也许您需要构建一个有限状态机 (FSM) 来正确处理程序的状态和状态之间的转换。正如@millinon 建议的那样,如果您的程序足够简单,您可以使用简单的switch
,或者查看现有的 C++ FSM 库之一,例如 boost-extension.redshoelace.com/docs/boost/fsm/doc/…
这适用于 C,但不适用于 C++。
我正在使用它来实现 Switch 语句。假设如果 button== 右按两次,则它应该将枚举值更新更改为下一个。如果再次按下将其更改为下一个枚举值。
【参考方案1】:
您到底想完成什么?即使 enum
可能在编译器中使用 int 创建,尝试在 screen_type 变量上使用增量运算符 (++
) 是否有意义?如果屏幕类型是DISPLAY_TYPE_MAX
并且按下了右键应该会发生什么?
可以强制编译器接受您的enum
/int
转换,但这样做会使代码更难阅读。
enum
的目的是将变量的值限制为枚举包含的值。这几乎就像创建一个新的变量类型,并声明该类型被限制为一组特定的值。从这个意义上说,enum
并不真正意味着被视为一个数学值(如int
),因此在一个上使用++
并没有真正意义。
作为替代方案,我建议使用switch
或只编写一个函数来执行右键操作。
【讨论】:
我有 5 个键:上/下/右/左/选择。和菜单显示和设置。这 5 个键用于在循环内用于不同目的。 @开始默认显示:日期和时间。如果按下右键将显示更改为坐标,如果再次更改枚举值。我正在使用切换键来采取行动。【参考方案2】:枚举值不应该有算术运算。它是一个值数量有限的集合。
虽然你可以在 c11 中声明枚举的底层类型来操作它。但 arduino 的 avr-compiler 可能不支持。
您可以将 enum 更改为 int/byte 类型,并将 enum 值定义为整数值。
#define DATE_TIME (0)
// other values.
int display_type;
【讨论】:
以上是关于按下按钮时增加枚举值的主要内容,如果未能解决你的问题,请参考以下文章
尝试按下按钮将精灵的 zRotation 增加 1 度时旋转不正确
当按下另一个可触摸的不透明度时,一个可触摸的不透明度不会按下