Ошибка перечисления Objective C? - PullRequest
6 голосов
/ 04 ноября 2010

Я определил перечисление в верхней части заголовка моего класса:

enum PresetSeq{kSeqClear=0, kSeqAllBeats, kSeqAllTicks};

Но когда я пытаюсь объявить метод для этого класса, используя перечисление.

-(void)quickSetSeq:(PresetSeq)pattern  forChannel:(long)ch;

Я получаю ошибку: ожидается ')' перед 'PresetSeq'

Если я вместо этого наберу определение enum:

typedef enum  {kSeqClear=0, kSeqAllBeats, kSeqAllTicks} PresetSeq;

Тогда компилятор доволен, но я не помню, чтобычто в C / C ++.

Должны ли перечисления быть typedef в Obj-C?

Спасибо

Стив

PS - я видел другие посты оObj-C перечисляет, но не почему этот простой случай терпит неудачу.

Ответы [ 2 ]

6 голосов
/ 04 ноября 2010

Это C enum s. (Помните, что 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;
4 голосов
/ 04 ноября 2010

Если вы используете:

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;

Inв этом случае вы можете использовать struct X или Y в качестве типа, но вы не можете использовать X отдельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...