繁体   English   中英

Objective-C枚举错误?

[英]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 XY作为类型,但不能单独使用X

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM