在xcode/objective c中使用c++

using c++ in xcode / objective c

本文关键字:c++ xcode objective      更新时间:2023-10-16

所以我试图在我的ios项目中使用C++。

在我创建了一个新项目(所有默认设置,xcode的新安装)后,我创建了Question.hQuestion.mm文件,如下所示:

Question.h
#include <iostream>
#include <string>
using std::string;
class Question {
public:
   string text;
};

Question.mm
#include "Question.h"

它尖叫着出现错误,比如:Iostream: No such file or directory

使用Xcode 3.2.6与iOS SDK 4.3

我做错了什么?

最有可能的原因是您将Question.h包含在非C++文件中,例如,您的AppDelegate可能是一个.m文件,并且您正试图在其中包含Question.h

有两种解决方案。首先,你可以将所有东西都设置为Objective-C++(将所有.m文件重命名为.mm)。从历史上看,我发现这非常不方便,因为Xcode和gdb在使用ObjC++时总是遇到很多麻烦,你可能会遇到很多困惑(gdb中可怕的"没有这个指针"answers"堆栈框架的未知语言"错误)。我还没有对最新版本的Xcode和gdb做足够的工作来确定这是否仍然是一个问题,但我怀疑这是因为gdb还没有做很多工作。此外,ObjC++的编译速度较慢。

另一种选择是将C++封装到ObjC中,这样您就可以将其自由地包含到代码的纯ObjC部分中。这是我通常采取的方法。ObjC++是一种有点混乱的IMO语言,我认为最好保持ObjC(.m)和C++(.cpp)的纯粹性,并用一层薄薄的ObjC++(.mm)将它们粘合在一起。

确保主.m文件没有导入AppDelegate文件。它可能是这样使用的:

NSStringFromClass([AppDelegate class])

但你可以这样做:

@"AppDelegate"

这解决了我的问题。

尝试将Question.mm重命名为Question.cpp,因为xcode根据扩展决定使用哪个编译器。