Objective-c 头文件中的 C++ 类声明
Posted
技术标签:
【中文标题】Objective-c 头文件中的 C++ 类声明【英文标题】:C++ class declaration in objective-c header 【发布时间】:2010-07-30 14:56:13 【问题描述】:我想在 Objective-C 头文件中声明一个类 c++ 样式,但我收到一个错误“错误:预期 '='、','、';'、'asm' 或 '__ 属性 __' before ' CPPClass'"
这是来自 .h 文件的代码。
class CPPClass;
@interface OBJCClass : NSObject
CPPClass* m_pCPPObject;
@end
如果我实现它objective-c风格@class CPPClass
我在定义它时得到一个错误,说它找不到接口声明。有没有这样做,否则,所有导入我的头文件和导入的c++头文件的objective-c类也必须是.mm文件。
ps。我已将 m 文件重命名为 mm。
【问题讨论】:
你有什么文件? CPPClass.cpp、CPPClass.h、OBJCClass.mm 和 OBJCClass.h ?在编译错误之前实际列出的正在编译的文件是什么。我的猜测是 .cpp 文件实际上是在抱怨 #includes 带有 obj-c 定义的文件。 类如您所说,cpp 文件从不包含 OBJCClass.h 。我认为问题在于其他 obj-c 类包含 OBJCClass.h 并且无法解释 c 样式声明。 【参考方案1】:仅在编译 C++ 时声明 cpp 类。否则使用 typedef 无效:
#ifdef __cplusplus
class CPPClass;
#else
typedef void CPPClass;
#endif
这样,非 C++ 编译单元将实例变量视为 void 指针。由于所有指针的大小相同,因此实例变量的类型无关紧要。
【讨论】:
【参考方案2】:将包含它的所有文件重命名为具有 .mm 扩展名。这将告诉编译器使用-ObjC++
标志进行编译。
【讨论】:
我很害怕,它不仅仅是几个包含该文件的文件,并且希望有某种解决方法:(以上是关于Objective-c 头文件中的 C++ 类声明的主要内容,如果未能解决你的问题,请参考以下文章