我在类头的顶部定义了一个枚举:
enum PresetSeq{kSeqClear=0, kSeqAllBeats, kSeqAllTicks};
但是当我尝试使用枚举为该类声明一个方法时。
-(void)quickSetSeq:(PresetSeq)pattern forChannel:(long)ch;
我收到错误:在“PresetSeq”之前应有“)”
如果我改用 typedef 枚举:
typedef enum {kSeqClear=0, kSeqAllBeats, kSeqAllTicks} PresetSeq;
然后编译器很高兴,但我不记得在 C/C++ 中必须这样做。
在 Obj-C 中枚举必须是 typedef 吗?
谢谢
史蒂夫
附言- 我看到了其他关于 Obj-C 枚举的帖子,但不知道为什么这个简单的案例失败了。
最佳答案
这些是 C 枚举
。 (记住 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;
关于c++ - Objective-C 枚举错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4094357/