2010-07-30 6 views
0

Я хочу объявить класс C++ в заголовке object-c, но я получаю сообщение об ошибке «error: expected» = ',', ','; ',' asm ' или '__ атрибут __' до «CPPClass» «Объявление класса C++ в заголовке object-c

Вот код из файла .h.

class CPPClass; 
@interface OBJCClass : NSObject 
{ 
    CPPClass* m_pCPPObject; 
} 
@end 

если я реализовать его Objective-C стиль @class CPPClass я получаю сообщение об ошибке при определении его, сказав, что он не может найти объявление интерфейса. В любом случае, все классы Object-C, которые импортируют мой заголовочный файл с импортированным заголовком C++, также должны быть .mm-файлами.

пс. Я переименовал файл m в mm.

+0

Какие у вас есть файлы? CPPClass.cpp, CPPClass.h, OBJCClass.mm и OBJCClass.h? Что такое компиляция файла, фактически перечисленная непосредственно перед ошибкой компиляции. Я предполагаю, что файл .cpp на самом деле жалуется, когда он # включает файл с определениями obj-c. –

+0

классы, как вы сказали, файл cpp никогда не включает OBJCClass.h. Я думаю, проблема в том, что другие классы obj-c включают OBJCClass.h и не могут интерпретировать объявление стиля c. – MartinG

ответ

1

Переименуйте любые файлы, которые включают в себя как .mm расширения. Это скажет компилятору компиляцию с флагом -ObjC++.

+0

Я боялся этого, это больше, чем несколько файлов, которые включают этот файл, и надеялся, что есть какой-то способ обойти это :( – MartinG

3

Объявлять класс cpp только при компиляции C++. Используйте ЬурейиЙ опорожнить иначе:

#ifdef __cplusplus 
class CPPClass; 
#else 
typedef void CPPClass; 
#endif 

Таким образом, не являющаяся C++ единицы компиляции смотрите переменный экземпляр в качестве указателя ничтожного. Поскольку все указатели имеют одинаковый размер, тип переменной экземпляра не имеет значения.

Смежные вопросы