2011-04-06 33 views
2

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

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

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

回答

4

如果您希望能够将Objective-C类接口导入到Objective-C和Objective-C++代码中,您可以使用#ifdef将实例变量声明为void *:

@interface MyClass : NSObject { 
    #ifdef __cplusplus 
    IPoint *point; 
    #else 
    void *point; 
    #endif 
} 

不幸的是,这是否意味着你将需要分别管理C的寿命++手动对象,创建和使用新的摧毁它,在你的Objective-C++ init和dealloc的方法删除。

1

使用C++类ivar的Objective-C类的头文件必须编译为Objective-C++。请确保在源代码文件名中使用.mm扩展名而不是.m扩展名,或者将该文件设置为在Xcode中编译为Objective-C++。

相关问题