我在Arduino中使用自定义枚举类型时遇到了一些麻烦。
我已阅读elsewhere由于Arduino IDE预处理,使用头文件是自定义类型声明所必需的。所以,我已经做到了,但我还是无法使用我的自定义类型。这是我的主要arduino文件(beacon.ino)中代码的相关部分
#include <beacon.h>
State state;
在beacon.h中:
typedef enum {
menu,
output_on,
val_edit
} State;
但是,当我尝试编译时,我收到以下错误:
beacon:20: error: 'State' does not name a type
我认为我编写或包含头文件的方式有问题。但是什么?
答案 0 :(得分:3)
beacon.h应如下:
/* filename: .\Arduino\libraries\beacon\beacon.h */
typedef enum State{ // <-- the use of typedef is optional
menu,
output_on,
val_edit
};
带
/* filename: .\Arduino\beacon\beacon.ino */
#include <beacon.h>
State state; // <-- the actual instance
void setup()
{
state = menu;
}
void loop()
{
state = val_edit;
}
当你在主INO文件中实例化时,将typdef保留为out并且关闭“state”的尾随实例,或者反之。上面的beacon.h文件需要位于用户目录。\ Arduino \ libraries \ beacon \目录,需要重启IDE以缓存其位置。
但你可以在INO
中定义它并立即实例化它/* filename: .\Arduino\beacon\beacon.ino */
enum State{
menu,
output_on,
val_edit
} state; // <-- the actual instance, so can't be a typedef
void setup()
{
state = menu;
}
void loop()
{
state = val_edit;
}
两者编译都很好。
您还可以使用以下内容:
/* filename: .\Arduino\beacon\beacon2.ino */
typedef enum State{ // <-- the use of typedef is optional.
menu,
output_on,
val_edit
};
State state; // <-- the actual instance
void setup()
{
state = menu;
}
void loop()
{
state = val_edit;
}
此处实例与枚举分开,允许枚举仅为typedef。上面是一个实例,而不是typedef。