【问题标题】:Objective C with some C++ code won't compile带有一些 C++ 代码的 Objective C 无法编译
【发布时间】:2011-08-14 04:53:40
【问题描述】:

我有一个带有一些 C++ 代码的 Objective C 项目,果然 C++ 代码不会编译

我知道编译器会假设要编译哪种语言,但我之前看过这个应用程序运行,所以我很好奇如何让我的 Xcode 4 运行编译这个项目

即。此函数声明会产生错误,因为编译器无法识别 c++ std:: 语法

 std::string string_with_formatting(const unsigned int value)
 {

我该如何解决这个问题?我应该有什么#include 或#import

【问题讨论】:

  • 在 XCode3 中,您过去必须将 .m 文件的结尾更改为 .mm 才能获得 c++ - 您还需要这样做吗?
  • .h 库文件呢?

标签: objective-c xcode gcc compiler-construction linker


【解决方案1】:

Objective-C++ 是 C++ 的超集。您可以在 Objective-C++ 源代码中使用 C++。

  1. 确保文件具有.mm 扩展名,否则将被视为Obj-C,而不是Obj-C++
  2. #include <string>

【讨论】:

  • 库文件呢?我也有一个导致错误的 .h 文件,它有客观的 c 和 c++ 函数声明
  • 只要您将#import.h 放入.mm 文件中就可以了。如果没有,请告诉我们错误是什么。
  • 我得到 #include 没有这样的文件或目录,但 #include 克服了那个错误。但不是我的其他错误
  • 当您忘记将源重命名为 .mm 时会发生这种情况。是你做的吗?看到这个问题stackoverflow.com/questions/823116/…
  • 在解决其他编译器错误后出现链接器错误
【解决方案2】:

将该文件更改为.mm 以及包含该文件(或.h 随附的文件)的任何其他文件。

【讨论】:

  • @RD: 不,我是说如果你有一个类被划分为:.h.m。将.m 更改为.mm。并将包含新更改的.mm(或随附的.h)的任何文件.m 更改为.mm
【解决方案3】:

objective C 没有 std::string 的概念。你需要使用类似NSString

【讨论】:

  • @Colin 问题清楚地表明“带有一些 C++ 代码的 Objective C 项目”,这意味着他正在使用 Objective C。
  • 我在做iOS开发,使用Objective C,但是这个问题应该和iOS SDK无关
  • @RD。 NSString 不是 iOS 特定的:它也是由 GNUstep 提供的
  • 我明白了,是我需要编译的C++字符串函数
猜你喜欢
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
相关资源
最近更新 更多