奇怪的Objective-C / C`enum`行为

时间:2011-07-19 23:03:20

标签: objective-c c

我有这个奇怪的问题:

当我像这样创建enum时:

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

我收到错误:expected identifier before numeric constant

当我将最小的更改添加到成员名称时,我没有收到任何错误:

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

这怎么可能?谈论错误的数字常量是什么?这对我没有意义......

4 个答案:

答案 0 :(得分:7)

其中一个常量是#define d在另一个文件中。因此,预处理器将enum中的标识符替换为其值。然后编译器会看到这个常量值并抱怨,因为它需要一个标识符。

答案 1 :(得分:2)

您尝试定义的命名常量之一可能已在另一个标头中定义,可能在Apple的一个框架中定义。您只需为常量选择一个不同的名称。

答案 2 :(得分:0)

听起来您不止一次定义枚举,无论是字面上还是错误地包含文件。

答案 3 :(得分:0)

另外我可以说,用-E选项编译你的文件并在结果文件中找到你的错误代码将帮助你看看发生了什么。 F.e。:cc -E myfile.c | grep -B 6 ParcelStatus