我有一个c ++类IPoint,并希望使用IPoint实例作为obj-c类的实例变量。 但是在编译它时会给我一个错误:“在'Ipoint'之前预期的说明符 - 限定符列表” 但是我已经包含了所需的标题“IPoint.h”。
但是当我在我的类中使用cpp对象时,只需通过初始化它而不使其成为实例变量,它就可以工作。
有一个特定的要求是将cpp对象存储为实例变量,因为在我的项目中需要进一步使用它,如果有可能让它像为对象或其他任何东西编写包装器一样工作。 请帮助我!
答案 0 :(得分:4)
如果您希望能够将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来创建和销毁它。
答案 1 :(得分:1)
具有C ++类ivar的Objective-C类的头必须编译为Objective-C ++。确保在源代码文件名中使用.mm扩展名而不是.m扩展名,或者将文件设置为在Xcode中编译为Objective-C ++。