调查员演员

时间:2011-09-13 16:34:47

标签: objective-c c

尝试将自己的枚举器转换为通讯簿值时出错:

typedef enum {
    kACTextFirstName = kABPersonFirstNameProperty, // error: expression is not an integer constant expression
    kACTextLastName = (int)kABPersonLastNameProperty, // error: expression is not an integer constant expression
} ACFieldType;

如何解决问题?

谢谢。


我需要使用ABAddressBook的框架const值来初始化我的枚举,例如kABPersonLastNameProperty或kABPersonFirstNameProperty。

1 个答案:

答案 0 :(得分:5)

在C语言中(与C ++不同),声明为const的对象,即使用常量表达式初始化,也不能用作常量。

你没有向我们展示kABPersonFirstNameProperty的声明,但我猜它的声明如下:

const int kABPersonFirstNameProperty = 42;

如果需要使用名称kABPersonFirstNameProperty作为常量表达式,可以将其声明为宏:

#define kABPersonFirstNameProperty 42

或作为枚举常量:

enum { kABPersonFirstNameProperty = 42 };

请注意,enum hack只允许您声明int类型的常量。

同样适用于kABPersonLastNameProperty

(为什么你把其中一个投射到int,而不是另一个?)

如果这不能回答你的问题,那是因为你没有给我们足够的信息。