2009-07-03 36 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]; 
}