Смешивание кода Objective-C и C ++ - PullRequest
4 голосов
/ 10 августа 2009

У меня есть приложение Objective-C / C ++, которое использует функциональные возможности, предоставляемые библиотекой C ++.

Один из классов C ++ содержит перечисление вроде этого:

class TheClass
{
public:
[...]

enum TheEnum
{
    YES,
    NO,
};

[...]
};

Включение (с использованием #import -if, если это важно) файла заголовка с объявлением вышеупомянутого класса в исходном файле Objective-C / C ++ (* .mm) приведет к сбою компиляции, поскольку препроцессор заменит «YES» на термин «(BOOL) 1» (а также «НЕТ» через «(BOOL) 0»).

Есть ли способ исправить это без переименования значений перечисления?

Ответы [ 2 ]

5 голосов
/ 10 августа 2009

YES и NO - предопределенные константы в Objective-C, объявленные в заголовке objc.h.

Вы должны помешать препроцессору расширять макросы "YES" и "NO". Это может быть сделано локально #undef fing им.

Но технически, если вы используете ключевое слово языка в качестве идентификатора, вы можете ожидать неприятностей. Вы не напишите класс, содержащий член с именем MAX_PATH, не так ли?

0 голосов
/ 10 августа 2009

Значение #import имеет значение - заголовки C ++ в исходном файле Objective-C ++ должны быть включены в #include. Я думаю, хотя и не уверен на 100%, что выбор директивы include (#include против #import) определяет, какой препроцессор используется.

Вы также можете отменить объявление констант в перечислении, так как по умолчанию члены перечисления связаны с целыми числами, начиная с 0.

По комментариям я ошибаюсь. Похоже, вам придется переписать enum. Извините: (

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