Счетчики бросили - PullRequest
       3

Счетчики бросили

1 голос
/ 13 сентября 2011

У меня ошибка при попытке привести собственный перечислитель к значениям адресной книги:

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, такие как kABPersonLastNameProperty или kABPersonFirstNameProperty.

1 Ответ

5 голосов
/ 13 сентября 2011

В C (в отличие от C ++) объект, объявленный const, даже если он инициализирован с помощью константного выражения, не может использоваться как константа.

Вы не удосужились показать нам объявление kABPersonFirstNameProperty, но я предполагаю, что оно объявлено примерно так:

const int kABPersonFirstNameProperty = 42;

Если вам нужно использовать имя kABPersonFirstNameProperty в качестве константного выражения, вы можете объявить его как макрос:

#define kABPersonFirstNameProperty 42

или в качестве константы перечисления:

enum { kABPersonFirstNameProperty = 42 };

Обратите внимание, что хак enum позволяет вам объявлять только константы типа int.

Аналогично для kABPersonLastNameProperty.

(А почему вы приводите одного из них к int, а не другого?)

Если это не отвечает на ваш вопрос, это потому, что вы не дали нам достаточно информации.

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