iOS项目中的cpp编译问题

时间:2012-07-23 23:15:28

标签: c++ objective-c ios

我已将一些客观的C文件和c ++文件添加到现有的iOS项目中。当我将.mm文件的.h文件导入带有相应.m文件的.h文件时,会出现各种错误。

当我更改.h文件的.m文件时,将新代码导入.mm我然后得到相同的先前错误但是有关新.mm文件的新错误。

我不确定如何解决这个问题。

如果这有任何影响,我正在使用ARC。

它抱怨命名空间(未知类型),还有导入的.mm文件的未知名称问题,在.mm文件的.h文件中包含::的语句上的预期表达式错误。我没有得到的是这些文件在我复制它们的项目中正常工作。我只从项目中获取了源代码。并在目录中添加了标题搜索路径。我还选择了对添加目录选项的创建引用。

由于某种原因,文件不在编译源代码部分,当我尝试添加它们时,文件选择器树不包含我添加的这些源文件。添加的目录也是蓝色而不是黄色,但是为空。

1 个答案:

答案 0 :(得分:3)

如您所知,C ++代码只能用于.mm文件。当编译器抱怨namespace是一个未知类型时,通常意味着在使用Objective C ++编译器时正在使用Objective C编译器。更简单:你有一个.m文件需要是.mm。

一般来说,您可以选择两种方式。每当Objective C文件抱怨时,将其更改为.mm。这是一个滑坡,通常会导致整个项目级联成一个Objective C ++的巨型球。另一个选择是隔离C ++,这样只有极少数的Objective C文件需要.mm扩展名。

显然,后者是更好的选择。可能导致混淆的原因是#importing一个头文件,其中包含来自应用程序中其他地方的 实际上不需要C ++的C ++代码。如果C ++是Objective C类的实现细节,则可以尝试通过利用Class Extensions将C ++保留在类的头文件之外。否则,您可以创建一个Objective C类,其唯一目的是将C ++包装在自己的实现中,同时为其他类公开一个干净的头文件以供使用。

基本上,如果你可以保持标题清洁,那么你就不必担心意外地间接#importing某些C ++到一个毫无疑问的编译单元。