【问题标题】:Compile errors with #include <string> in Cocoa App在 Cocoa App 中使用 #include <string> 编译错误
【发布时间】:2011-09-25 00:34:58
【问题描述】:

我正在尝试在 xcode 4.0 中编译 Cocoa 应用程序,但出现此错误...

fatal error: 'string' file not found

...当试图在这一行编译成 .pch 文件时:

#include <string>

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

目标操作系统是 Mac OS X 10.6

在编译预编译的头文件时会发生错误,并且不会访问任何其他文件。编译版只有Foundation.framework,非编译版也有。

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

【问题讨论】:

  • 您的应用程序是用什么编程语言编写的? &lt;string&gt; 不是 C++ 的东西,不是 Objective-C 的东西吗?
  • 你可以在objective-c++中使用stl。只需将您的文件命名为 .mm。我从一个全新的可可应用模板完全重新开始了这个项目,现在它工作正常。

标签: xcode stl


【解决方案1】:

源文件的扩展名是什么?如果是“.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

【讨论】:

  • +1 "只需将 c++ 特定的头文件放在 "#ifdef __cplusplus" 块中" -- 是正确的解决方案 -- 但对于编译的每种语言都必须存在保护该项目,因为这个特定的包含在 pch 中。 iow,如果都是 c++ 和/或 objc++ 就不会出错。显然,至少有一个文件不能识别 c++(例如 c 或 objc)。会更新自己——我现在看到这是几个月大的了:)
  • 这帮助我弄清楚了如何为 Cocos2D-X 项目正确设置 Prefix.pch。在“#ifdef __cplusplus”中包装 C++ 特定的东西就像一个魅力。
【解决方案2】:

string 是 C++ 标头(用于 std::string)。如果您正在寻找 strcpy 之类的内容,则需要包含 string.h

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    相关资源
    最近更新 更多