Objective-C枚举错误?

Ste*_*555 6 c c++ enums objective-c

我在类标题的顶部定义了一个枚举:

enum PresetSeq{kSeqClear=0, kSeqAllBeats, kSeqAllTicks};
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用枚举声明该类的方法时.

-(void)quickSetSeq:(PresetSeq)pattern  forChannel:(long)ch;
Run Code Online (Sandbox Code Playgroud)

我在"PresetSeq"之前得到错误:期望')'

如果我输入枚举枚举:

typedef enum  {kSeqClear=0, kSeqAllBeats, kSeqAllTicks} PresetSeq;
Run Code Online (Sandbox Code Playgroud)

然后编译器很高兴,但我不记得在C/C++中必须这样做.

enum必须是Obj-C中的typedef吗?

谢谢

史蒂夫

PS - 我看到了关于Obj-C枚举的其他帖子,但不是为什么这个简单的案例失败了.

Jac*_*kin 6

这些是C enums.(记住Objective-C只是C的严格超集).

要定义枚举类型,必须使用 typedef.

但是,如果您不需要使用独立类型(没有enum前缀)来统一引用该枚举,那么您不需要typedef,您可以像这样声明它:

enum PresetSeq {
  kSeqClear, 
  kSeqAllBeats, 
  kSeqAllTicks
};
Run Code Online (Sandbox Code Playgroud)

所以,在你的情况下,你可以这样做:

typedef enum {
  kSeqClear,
  kSeqAllBeats,
  kSeqAllTicks
} PresetSeq;

-(void)quickSetSeq:(PresetSeq)pattern  forChannel:(long)ch;
Run Code Online (Sandbox Code Playgroud)

或者没有typedef并使用enum PresetSeq如上所示的语法:

-(void)quickSetSeq:(enum PresetSeq)pattern  forChannel:(long)ch;
Run Code Online (Sandbox Code Playgroud)