【问题标题】:C++ class declaration in objective-c headerObjective-c 头文件中的 C++ 类声明
【发布时间】: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 样式声明。

标签: c++ objective-c objective-c++


【解决方案1】:

仅在编译 C++ 时声明 cpp 类。否则使用 typedef 无效:

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

这样,非 C++ 编译单元将实例变量视为 void 指针。由于所有指针的大小相同,因此实例变量的类型无关紧要。

【讨论】:

    【解决方案2】:

    将包含它的所有文件重命名为具有 .mm 扩展名。这将告诉编译器使用-ObjC++ 标志进行编译。

    【讨论】:

    • 我很害怕,它不仅仅是几个包含该文件的文件,并且希望有某种解决方法:(
    猜你喜欢
    • 2021-11-24
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    相关资源
    最近更新 更多