2016-02-25 146 views
1

我有一个关于在Xcode中使用Objective-C++模块中的C++头文件的问题。具体来说,为什么我可以在源文件中包含它们,但不包含头文件?Xcode和C++头文件

这里是一个具体的例子。

我使用Xcode 7.2.1并有两个项目。第一个是我打包到“myFramework.framework”中的C++框架。它暴露了“myFramework.h”,它反过来引入“myLib.h”。在“myLib.h”的顶部是“#include <string>”。

第二个项目是一个Objective-C iOS应用程序,它使用上述框架。在这个项目中,“myViewController.mm”(Objective-C++源代码)在顶部有“#import”myFramework/myFramework.h“,并引用该头文件中定义的东西。

此时一切都很好和不错的。它建立和没有问题的运行。

当我移动“#进口myFramework/myFramework.h”行“myViewController.h”,编译,因为它不能找到“”头依赖失败。

如果将“myViewController.h”的文件类型从普通的“C Header”更改为Objective-C++头文件无关紧要,无论哪种方式,Xcode的头文件搜索路径都不寻找标准的C++头文件

所以我的主要问题是为什么这样表现?为什么仅仅因为它在一个头文件中而被处理#include /#import?

我的第二个问题是,如果有一些方法可以使Xcode处理#include /#在导入到头文件而不是源文件时相同吗?

非常感谢!

+0

你确定在编译'.mm'文件时出现错误吗?是不是'myViewController.h'导入到其他文件(然后该文件无法编译)?顺便说一下,不清楚你是否使用'#import“myFramework/myFramework.h”'或'#import ' – sergio

+0

是的,就是这样。 “main.m”隐藏在“支持文件”下。我习惯了它与所有其他来源位于同一个文件夹中。也许这在Xcode的开发过程中发生了某些变化,我不知道。但无论如何 - 都很好,谢谢! – Bungles

+0

我已将我的评论移至答案,因此其他人更容易找到答案。 – sergio

回答

1

我怀疑将C++头文件包含在其他头文件中的问题是,Objective-C源文件可以看到C++头文件,它会使其翻转。

如果您混合使用了C++/Objective-C++/Objective-C,那么您最好只向项目中的其他模块公开纯Objective-C接口,并将任何C++头文件包含在Objective-C++源文件中只要。

或者做一切Objective-C++,然后你根本不需要担心它。

希望这也回答你的第二个问题。

+0

App项目中的所有文件都是。mm(ObjC++)所以不知道什么ObjC文件将#包括我的框架头不知道我的知识?至于界面,我使用C++ 11字符串来处理所有事情,所以真的需要框架的使用者来使用它们。 – Bungles

+0

您必须发布完整的编译器错误消息才能弄清楚。 – trojanfoe

+0

你的加上塞尔吉奥的回答(见上文)导致我成为罪魁祸首。目前正在做一个/ facepalm ... – Bungles

3

您确定在编译myViewController.mm文件时遇到错误吗?

检查myViewController.h是否被导入到其他非ObjC++文件(并且那个文件无法编译)。

+0

这似乎与我的回答没有太大区别。它增加了什么? – trojanfoe

+0

我最初是作为评论写的。由于OP在他们的回答中表示:“是的,就是这样。”main.m“隐藏在”支持文件“下,我想这是一个答案。 – sergio