如果我理解正确的话,你必须要从Objective-C的文件,包括C++头文件(.hpp
)。不幸的是,你不能直接这样做。您必须使用解决方法。
最简单的方法是更改包含此C++头文件(直接或间接)编译为Objective-C++文件的每个Objective-C文件(.m
)的编译选项。这可以通过将文件重命名为.mm
扩展名或通过更改文件编译器的选项来完成。 Objective-C++不是Objective-C的完整超集(因为C++不是C的超集),并且某些有效的Objective-C无效Objective-C是无效的Objective-C不支持Objective-C的超集(因为C++不是C的超集) C++(如果C++关键字用作变量名称)。
如果发生这种情况,你必须创建一个Objective-C包装器类,以在Objective-C++的实现,只是委托给C++类。这是创建一个CAXExceptionWrapper.h
Objective-C的文件,其中包含类似:
@interface CAXExceptionWrapper {
@private
void* _CAXExceptionImpl;
}
- (id)init;
// ...
@end
和含有`CAXExceptionWrapper.mm”的Objective-C++文件:
@import "CAXException.hpp"
@implementation CAXExceptionWrapper
- (id)init {
if ((self = [super init])) {
_CAXException = new CAXExceptionWrapper;
}
return self;
}
// ...
@end
然后在你的Objective-C的文件,包含包装Objective-C头文件而不是C++头文件。
究竟是哪一个,客观的C还是C++? –
[This answer](http://stackoverflow.com/questions/525609/use-c-with-cocoa-instead-of-objective-c/529017#529017)有很多关于你需要做什么的信息在Objective C中使用C++。同一页面上的其他答案也应该非常有用 - 无论评论中是否有火焰战争。 –
如果遵循约定,则.hpp文件将作为头文件包含在其他翻译单元中。请编辑您的问题,告诉我们更多关于* that *文件的信息:是C,C++,Objective-C还是Objective-C++?你如何包含.hpp文件? –