![](/img/trans.png)
[英]Understanding C++ enum through UIInterfaceOrientationMask for Objective-C / iOS
[英]Objective-C enum error?
我在类标题的顶部定义了一个枚举:
enum PresetSeq{kSeqClear=0, kSeqAllBeats, kSeqAllTicks};
但是当我尝试使用枚举声明该类的方法时。
-(void)quickSetSeq:(PresetSeq)pattern forChannel:(long)ch;
我在“PresetSeq”之前得到错误:期望')'
如果我输入枚举枚举:
typedef enum {kSeqClear=0, kSeqAllBeats, kSeqAllTicks} PresetSeq;
然后编译器很高兴,但我不记得在C / C ++中必须这样做。
enum必须是Obj-C中的typedef吗?
谢谢
史蒂夫
PS - 我看到了关于Obj-C枚举的其他帖子,但不是为什么这个简单的案例失败了。
这些是C enum
。 (记住Objective-C只是C的严格超集)。
要定义枚举类型 , 必须使用 typedef
。
但是,如果您不需要使用独立类型 (没有enum
前缀)来共同引用该枚举,那么您不需要typedef
,您可以像这样声明它:
enum PresetSeq {
kSeqClear,
kSeqAllBeats,
kSeqAllTicks
};
所以,在你的情况下,你可以这样做:
typedef enum {
kSeqClear,
kSeqAllBeats,
kSeqAllTicks
} PresetSeq;
-(void)quickSetSeq:(PresetSeq)pattern forChannel:(long)ch;
或者没有typedef
并使用enum PresetSeq
语法,如上所示:
-(void)quickSetSeq:(enum PresetSeq)pattern forChannel:(long)ch;
如果您使用:
enum PresetSeq {kSeqClear=0, kSeqAllBeats, kSeqAllTicks};
那么你必须使用enum
名称:
-(void)quickSetSeq:(enum PresetSeq)pattern forChannel:(long)ch;
您最初的错误是因为没有 PresetSeq
类型,只是enum PresetSeq
之一。
当您执行typedef
版本时,会创建一个可以使用的类型别名PresetSeq
。
它完全相同:
struct X {int a;};
typedef struct (int a;} Y;
在这种情况下,您可以使用struct X
或Y
作为类型,但不能单独使用X
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.