尝试将自己的枚举器转换为通讯簿值时出错:
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。
答案 0 :(得分:5)
在C语言中(与C ++不同),声明为const
的对象,即使用常量表达式初始化,也不能用作常量。
你没有向我们展示kABPersonFirstNameProperty
的声明,但我猜它的声明如下:
const int kABPersonFirstNameProperty = 42;
如果需要使用名称kABPersonFirstNameProperty
作为常量表达式,可以将其声明为宏:
#define kABPersonFirstNameProperty 42
或作为枚举常量:
enum { kABPersonFirstNameProperty = 42 };
请注意,enum hack只允许您声明int
类型的常量。
同样适用于kABPersonLastNameProperty
。
(为什么你把其中一个投射到int
,而不是另一个?)
如果这不能回答你的问题,那是因为你没有给我们足够的信息。