2011-04-06 60 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++。

相關問題