在iPhone / iPad项目中#import C ++头文件时出现问题

时间:2010-10-08 12:42:09

标签: c++ iphone xcode compilation

我想在iPhone / iPad项目中使用 C ++类 我以不同的方式创建了这个文件(比如“New File”=> C ++),错误总是一样的。

当我在没有#import(.h C ++类)的情况下编译项目时,没关系。

但是,只要我在我的一个标头objective-c文件中#import头文件,我就会收到如下错误:

  
    

错误:vector:没有这样的文件或目录

  

  
    

错误:在':'标记“

之前预期'=',',',';','asm'或'属性'   

我尝试在文件信息中为文件类型(C ++类)设置不同的值,在.mm等中重命名我的objc类,但它似乎不起作用。

所以我一定错过了在objc头文件中导入.h c ++类的内容,但是:p ^^

解决方案感谢Vlad
1°)包含标题c ++文件:

#ifdef __cplusplus
    #include "Triangulate.h"
#endif

2°)重命名.mm中的objc文件和他的文件信息(右侧clic)设置文件类型为sourcecode.cpp.objcpp

感谢您的帮助! 文森特

1 个答案:

答案 0 :(得分:7)

  

注意:Xcode需要文件名   有一个“.mm”扩展名   要启用的Objective-C ++扩展   由编译器。

尝试在驻留在扩展名为.m的文件中的Objective-C代码中使用C ++是问题的最可能原因,因为编译器根据错误消息无法识别C ++构造。将.m文件重命名为.mm应该会有所帮助。

有关详细信息,请参阅Using C++ with Objective-C

假设您想在Objective-C ++源文件中使用Objective-C类,那就没有问题了。唯一的限制是您的.h文件必须是Objective-C clean。这意味着您不能在其中使用任何C ++ - isms,或者如果您这样做,则必须将它们全部包装在#ifdef __cplusplus中。当标题#included由一个普通的Objective-C文件包含时,标题将被编译为ObjC模式,因此它必须消除该情况的任何C ++主义(1)。因此,您的Objective-C头文件应该包含C ++标头,如下所示:

#ifdef __cplusplus
# include MyCPPHeader.h
#endif