2010-07-18 4 views
0

Есть ли способ включить заголовок цели-c из cpp? Потому что, когда я пытаюсь # включить «cocos2d.h» из файла cpp .h, появляется много ошибок, жалующихся на @ и s''s.включают заголовок цели-c в файле C++

Могут ли файлы C++ включать такие заголовки obj-c?

+1

Включение файла подобно копированию и вставке кода из одного файла в другой. Я не уверен, почему вы думаете, что это сработает, так как они разные языки. Я думаю, что вопрос, который вы должны задать, - «как я могу связать код C++ с объектным C-кодом». – Cogwheel

+0

При использовании .mm файла Obj-c просто отлично, включая cpp, поэтому я думал, что обратное возможно. – sharvey

+0

Да, но обратный содержит ObjC в файле .mm, который в основном использует C++. –

ответ

8

Возможно, но вам нужно использовать Objective-C++ (например, создав расширение файла .mm), чтобы смешивать языки, простые источники C++ не работают.

Чтобы сделать это ясно:

  • .m только файлы позволяют Sources Objective-C
  • .cpp только файлы позволяют C источники ++
  • .mm позволяют источники смешанные Objective-C++ - то есть и Objective-C и C++ с некоторыми ограничениями

Если вам нужно сохранить два мира отдельно, вам нужно написать обертку clas ses, который скрывает детали Objective-C от C++ и наоборот.

+0

Так что общение с объектной-c-библиотекой из C++ невозможно? Надеюсь, что нет. – sharvey

+0

@shar: Технически вы можете вызывать ObjC из простого C++, используя функции времени выполнения, но вы не захотите этого делать. Просто используйте либо смешанный подход, либо оберните классы ObjC. –

+0

@Georg Fritzsche: но если да, похоже, я не могу использовать синтаксис cpp в файле .h или .mm. – sharvey

1

Это возможно, если вы компилируете смешанные объекты objc/C++. Приложения для какао могут быть написаны в смешанных языках в обоих направлениях: вы можете использовать класс obj-c внутри C++ или C++-класса внутри объекта obj-c.

Я предполагаю, что в вашем случае вы компилируете чистую C++-приложение, где код obj-c недопустим.

+0

Нет, я разрабатываю для iphone os, а файл заголовка cpp ссылается на файл .mm. – sharvey

1

C++ не знает, что такое Objective-C. Так что включение Objective-C .h в .cpp - это не-go.

Другой способ, хотя это хорошо, если вы используете расширение .mm-файла (Objective-C++) вместо .m (Objective-C).

+1

Это было бы грубо, но если вы действительно хотели включить заголовок, который включает Objective-C в .cpp, оберните объект Objective-C в '#ifdef __OBJC__' ...' # endif', чтобы он не разбирался. –