[英]How to include C++ headers in an Objective C++ header?
我有一个.cpp / .hpp文件组合 - > .hpp文件有#include ..
我也有一个.mm / .h文件组合 - >如果我在.mm目标C ++文件中包含.hpp文件,则没有问题。 但是,如果我尝试在.h(Objective C标头)文件中包含.hpp文件,我会收到预处理器问题'找不到iostream'。
除了做一些时髦的东西,比如在我的Objective C .h文件中有一个void *然后把它作为包含在.mm中的类型或者包装在Objective C ++类型中的每个C ++类型之外,还有什么方法吗?
我的问题与托尼的问题基本相同(但没有人回答他):
https://stackoverflow.com/questions/10163322/how-to-include-c-header-file-in-objective-c-header-file
问题是您必须避免标头中的所有C ++语义,以允许普通的Objective-C类包含它。 这可以使用不透明指针来完成。
class CPPClass
{
public:
int getNumber()
{
return 10;
}
};
//Forward declare struct
struct CPPMembers;
@interface ObjCPP : NSObject
{
//opaque pointer to store cpp members
struct CPPMembers *_cppMembers;
}
@end
#import "ObjCPP.h"
#import "CPPClass.h"
struct CPPMembers {
CPPClass member1;
};
@implementation ObjCPP
- (id)init
{
self = [super init];
if (self) {
//Allocate storage for members
_cppMembers = new CPPMembers;
//usage
NSLog(@"%d", _cppMembers->member1.getNumber());
}
return self;
}
- (void)dealloc
{
//Free members even if ARC.
delete _cppMembers;
//If not ARC uncomment the following line
//[super dealloc];
}
@end
要在Objective-C ++头文件中使用C ++,请确保:
#include指令只包含文本; Objective C抱怨的唯一时间是包含文件中的某些内容是否无效Objective C.
在你的情况下,它给你答案; 目标C中找不到iostream.h头文件。查找引用此文件的位置并删除#include。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.