2011-09-25 296 views
8

我尝试编译可可应用程序在Xcode 4.0和我得到这个错误...编译用#include <string>错误

fatal error: 'string' file not found 

...试图编译到时.PCH这条线上的文件:

#include <string> 

我有另一个xcode项目做同样的事情,但没有得到错误。我已经搜索了一些不同的构建设置,但我找不到一个。唯一的区别是,编译OK的项目是作为命令行项目启动的,而不是Cocoa项目,但构建设置相同。

目标操作系统为Mac OS X 10.6

编译预编译的头时,并没有得到任何其他文件的错误发生。编译版本的唯一框架是Foundation.framework,非编译版本也有。

为什么在一个项目中找不到另一个项目?有什么建议?

+0

您的应用程序使用哪种编程语言编写?不是''是C++的东西,而不是Objective-C的东西? –

+1

您可以在objective-C++中使用stl。只需将您的文件命名为.mm。我完全从一个新鲜的可可应用程序模板开始这个项目,现在它工作正常。 –

回答

0

string是C++头文件(用于std :: string)。如果您正在寻找像strcpy之类的东西,您需要包含string.h

13

什么是您的源文件的扩展名?如果它是“.m”,则尝试将其更改为obj-cpp“.mm”,以便Xcode能够推导出正确的语言。 或者只是把C++ - 内“的#ifdef __cplusplus”块

更新

的后卫必须存在于项目的编译每一种语言,因为这具体包括在PCH特定的头文件。 IOW,如果它全部是C++和/或objC++,那就不会有错误。显然,至少有一个文件不能识别C++(例如,C或ObjC源也被编译到目标中)。因此,您只需像这样保护它:

// MONPrefix.pch 

#ifdef __cplusplus 
#include <string> 
#endif 

// same for objc, so your C and C++ sources compile with no error: 
#ifdef __OBJC__ 
#include <Foundation/Foundation.h> 
#endif 
+0

+1 *“只是把C++特定的头文件放在里面”#ifdef __cplusplus“block”* - 是正确的解决方案 - 但是对于在项目中编译的每种语言都必须存在警卫,因为这个特定的包含在pch中。嗨,如果它全部是C++和/或objC++,那么就不会有错误。显然,至少有一个文件不能识别C++(例如c或objc)。将更新自己 - 我现在看到这是几个月的:) – justin

+0

这帮助我弄清楚如何正确设置Cocos2D-X项目的Prefix.pch。在“#ifdef __cplusplus”中包装C++特定的东西就像一个魅力。 –