2009-07-03 39 views
1

我有一個主要使用C++的項目,但我試圖在Objective-C++庫中進行鏈接。我有一個頭,看起來像:在C++類定義中包含Objective C++類型

CPlus.h:

#import "OBJCObject.h" 

class CPlus { 
    OBJCObject *someObj; 

}; 

CPlus.mm:

CPlus::CPlus() { 
    someObj = [[OBJCObject alloc] init]; 
} 

當我導入的Objective-C++頭到我的代碼,我結束了來自iPhone SDK內部的數千個錯誤。看起來有些東西正在把一種語言看作是另一種語言。對不起,如果這個描述很差,我是新來的,並且有些困惑。

你可以在C++類中包含Objective-C/Objective-C++類型嗎?你需要做些什麼來包含其他類型的頭文件嗎?

回答

3

您是#import從Objective-C(.m)文件中獲得CPlus.h嗎?如果是這樣,它將不理解C++類,因爲它正在使用C語義進行編譯,而且不是Objective-C++的感知。 .m編譯器將會看到class而不知道該怎麼做。

只要源文件是.mm,就可以在C++類定義中包含Objective-C對象,反之亦然。

0

以下內容適用於iPhone SDK。確保聲明C++構造函數,並在.mm文件中實現它。

OBJCObject.h

#import <Foundation/Foundation.h> 

@interface OBJCObject : NSObject { 
} 

@end 

OBJCObject.m

#import "OBJCObject.h" 

@implementation OBJCObject 

@end 

CPlus.h

#import "OBJCObject.h" 

class CPlus { 
    OBJCObject *someObj; 
    CPlus(); 
}; 

CPlus.mm

#include "CPlus.h" 

CPlus::CPlus() { 
    someObj = [[OBJCObject alloc] init]; 
}