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++ 类声明的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Objective-C 中的头文件顶部有 import 和 class 语句?

C++头文件中声明类的小问题

Objective-C语法汇总

Objective-C学习笔记-第一天

在 C++ 中的类构造函数中初始化结构数组

Objective-C 使用 C++类