c++ - Objective-C 枚举错误?

标签 c++ objective-c c enums

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

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/

相关文章:

C++对齐——严格和弱

ios - 缩放后无法平移 UIScrollView

c - 在结构中引用未定义的类型如何合法?

ios - 读取 iOS 上其他应用的 badge 值

iOS 检查库中是否存在图像

C 具有负股息和除数的模运算差异是长无符号的

c++ - 我可以/应该在 GPU 上运行此统计应用程序的代码吗?

c++ - 错误 C2143 : syntax error : missing ';' before '*'

c++ - 将 Kinect 深度图像转换为真实世界坐标

c++ - 无法从文本文件中提取某些记录