Странное Objective-C / C `enum` поведение - PullRequest
1 голос
/ 20 июля 2011

У меня странная проблема:

Когда я создаю enum, как это:

typedef enum {    
    kParcelStatusInTransit,
    kParcelStatusArrived,
    kParcelStatusDelivered,
    kParcelStatusUnknown
} ParcelStatus;

Я получаю ошибку: expected identifier before numeric constant

Когда я добавляю даже самое маленькое изменение в имя участника, я не получаю ошибки:

typedef enum {    
    kChangeParcelStatusInTransit,
    kChangeParcelStatusArrived,
    kChangeParcelStatusDelivered,
    kChangeParcelStatusUnknown
} ParcelStatus;

Как это возможно? О какой числовой константе говорит ошибка? Это не имеет смысла для меня ...

Ответы [ 4 ]

7 голосов
/ 20 июля 2011

Одна из констант была #define d в другом файле.Из-за этого препроцессор заменяет идентификатор в enum на его значение.Затем компилятор видит это постоянное значение и жалуется, так как ожидал идентификатора.

2 голосов
/ 20 июля 2011

Скорее всего, одна из именованных констант, которые вы пытаетесь определить, уже определена в другом заголовке, возможно, в одной из сред Apple. Вам просто нужно будет выбрать другое имя для ваших констант.

0 голосов
/ 18 июня 2013

Кроме того, я могу сказать, что компиляция вашего файла с опцией -E и размещение кода ошибки в файле результатов поможет вам увидеть, что произошло.Fe: cc -E myfile.c |grep -B 6 ParcelStatus

0 голосов
/ 20 июля 2011

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

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