Проблема, когда #import C ++ заголовочный файл в проекте iPhone / iPad - PullRequest
6 голосов
/ 08 октября 2010

У меня есть класс C ++, который я хотел бы использовать в проекте iPhone / iPad .
Я создал этот файл различными способами (например, с помощью «New File» => C ++), и ошибка всегда одна и та же.

Когда я компилирую проект без #import (класса .h C ++), все нормально.

Но как только я # импортирую файл заголовка в один из моих файлов target-c заголовка, я получаю сообщение об ошибке:

ошибка: вектор: нет такого файла или каталога

или

ошибка: ожидается '=', ',', ';', 'asm' или ' атрибут ' before ':' token "

Я пытался установить разные значения для типа файла (класса C ++) в File Info, переименовал мой класс objc в .mm и т. Д., Но, похоже, это не сработало.

Так что я, должно быть, что-то упустил из-за импорта класса .h c ++ в заголовочный файл objc, но что: p ^^

РЕШЕНИЕ благодаря Владу
1 °) Чтобы включить заголовочный файл c ++:

#ifdef __cplusplus
    #include "Triangulate.h"
#endif

2 °) Переименование файла objc в .mm И в его настройке типа файла File Info (щелчок правой кнопкой мыши) в виде sourcecode.cpp.objcpp

Спасибо за помощь!
Винсент

1 Ответ

7 голосов
/ 08 октября 2010

Примечание: Xcode требует, чтобы имена файлов имели расширение «.mm», чтобы расширения Objective-C ++ были включены компилятором.

Попытка использовать C ++ в Objective-Cкод, находящийся в файле с расширением .m, является наиболее вероятной причиной проблемы, поскольку компилятор просто не распознает конструкции C ++ в соответствии с сообщением об ошибке.Переименование файла .m в .mm должно помочь.

Подробнее см. Использование C ++ с Objective-C .

Предполагается, что вы хотите использовать Objective-C класс в исходном файле Objective-C ++, проблем нет вообще.Единственное ограничение - ваш файл .h должен быть чистым в Objective-C.Это означает, что вы не можете использовать любые C ++ -измы в нем, или что если вы это сделаете, вы должны обернуть их все в #ifdef __cplusplus.Заголовок будет скомпилирован в режиме ObjC, если он # включен простым файлом Objective-C, поэтому он должен исключить любые измы C ++ для этой ситуации (1) .Таким образом, ваш заголовочный файл Objective-C должен включать заголовок C ++, например:

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