在C++文件中的iOS中找不到#include <string>文件

dav*_*n11 9 c++ xcode ios

我在iOS下有一个客观的c/c ++项目,从OS/X移动它,我得到一个'找不到文件'错误

#include <string>
Run Code Online (Sandbox Code Playgroud)

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

/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/usr/include/c++/4.2.1/debug/
Run Code Online (Sandbox Code Playgroud)

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

xcode 4.2.1,ios5.0在OS/X 10.7.3上运行,并且在.cpp文件中,代码在OS/X上运行正常

Mac*_*ade 17

你确定<string>只包含一个.cpp文件吗?

我刚刚测试了一个新项目,通过添加一个.cpp文件并包含<string>它,它的工作原理与预期相同(相同的Xcode版本,相同的SDK版本).

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

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

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

还要检查你的预编译头文件(如果有的话),看看你是否包含了一些C++内容......

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

  • 值得注意的是,包含带有违规的`<string>`的头的所有头文件以及包含这些头文件的头文件(等等)都需要将.m更改为.mm.有一个解决方案,我尽可能坚持.那就是永远不要在我的obj-c头文件中包含c风格的标题.相反,尽可能地,我只将它们包含在.mm文件中.这样,"链上"的其他标题将不会受到影响. (5认同)

Hal*_*far 11

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

我建议您将所有.m文件重命名为.mm.包括main.m到main.mm.