12

我在 iOS 下有一个客观的 c/c++ 项目,将其从 OS/X 移出,但出现“找不到文件”错误

#include <string>

这是一个干净的项目,我刚刚添加了旧项目中的文件。STL 是否包含在 XCode 中设置?一次发现会产生多种可能性,例如

/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/usr/include/c++/4.2.1/debug/

但是将其添加到搜索路径只会引发更多错误。有什么建议么?(除了不要使用字符串 - 这是我正在移植的内部代码)

xcode 4.2.1, ios5.0 在 OS/X 10.7.3 上运行,它位于 .cpp 文件中,代码在 OS/X 上运行良好

4

2 回答 2

18

你真的确定<string>只包含在 .cpp 文件中吗?

我刚刚在一个新项目上进行了测试,添加了一个 .cpp 文件并包含了 .cpp 文件<string>,它可以正常工作,就像预期的那样(相同的 Xcode 版本,相同的 SDK 版本)。

但是如果我包含<string>在一个 .m 文件中,那么我当然会得到一个“找不到文件”编译器错误。

所以仔细检查一下,因为错误可能来自这里。

<string>是仅从 .cpp 文件中包含,还是从 .h 文件中包含旨在供 .cpp 实现使用的文件?
然后也许它也包含在 .m 文件中,因此出现错误。

还要检查你的预编译头文件,如果有的话,看看你是否在里面包含了一些 C++ 的东西......

还要记住,在后一种情况下,您可以在需要时依赖__cplusplus宏。

于 2012-05-01T22:33:49.577 回答
16

如果您在 ObjC 文件中包含标题并且它包含,<string>那么您会遇到这样的错误。对于所有 .m 文件,XCode 使用 C 编译器(clang 或 llvm-gcc)。对于所有 .mm 文件,它将使用(clang++ 或 llvm-g++)。

我建议检查并将所有 .m 文件重命名为 .mm。包括 main.m 到 main.mm。

于 2012-05-23T20:55:46.407 回答