【问题标题】:c++ class object as an instance variable in obj-c classc++类对象作为obj-c类中的实例变量
【发布时间】:2011-04-06 06:48:49
【问题描述】:
我有一个 c++ 类 IPoint,并希望使用 IPoint 的实例作为 obj-c 类的实例变量。
但是在编译时它给了我错误:“'Ipoint'之前的预期说明符限定符列表”
但是我已经包含了所需的标题“IPoint.h”。
但是当我在我的类中使用 cpp 对象时,只是通过初始化它而不使它成为实例变量,它可以工作。
cpp 对象存储为实例变量有一个特定要求,因为它在我的项目中需要进一步,如果有办法让它像为对象编写包装器或其他任何东西一样工作。
请帮帮我!
【问题讨论】:
标签:
iphone
c++
objective-c
wrapper
【解决方案1】:
如果您希望能够将您的 Objective-C 类接口 #import 到 Objective-C 和 Objective-C++ 代码中,您可以使用 #ifdef 将实例变量声明为前者的 void*:
@interface MyClass : NSObject {
#ifdef __cplusplus
IPoint *point;
#else
void *point;
#endif
}
不幸的是,这确实意味着您需要手动管理 C++ 对象的生命周期,分别在 Objective-C++ 的 init 和 dealloc 方法中使用 new 和 delete 创建和销毁它。
【解决方案2】:
具有 C++ 类 ivar 的 Objective-C 类的标头必须编译为 Objective-C++。确保在源代码文件名中使用 .mm 扩展名而不是 .m 扩展名,或者将文件设置为在 Xcode 中编译为 Objective-C++。