c ++类对象作为obj-c类中的实例变量

时间:2011-04-06 06:48:49

标签: iphone c++ objective-c wrapper

我有一个c ++类IPoint,并希望使用IPoint实例作为obj-c类的实例变量。 但是在编译它时会给我一个错误:“在'Ipoint'之前预期的说明符 - 限定符列表” 但是我已经包含了所需的标题“IPoint.h”。

但是当我在我的类中使用cpp对象时,只需通过初始化它而不使其成为实例变量,它就可以工作。

有一个特定的要求是将cpp对象存储为实例变量,因为在我的项目中需要进一步使用它,如果有可能让它像为对象或其他任何东西编写包装器一样工作。 请帮助我!

2 个答案:

答案 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 ++。