【问题标题】:How to set a single header file as C++ compiler in Xcode?如何在 Xcode 中将单个头文件设置为 C++ 编译器?
【发布时间】:2013-09-11 06:21:25
【问题描述】:

我的 Objective-C 项目中有一些 C++ 文件。为了在头文件中使用 STL,我在“构建设置”中将项目设置为编译源代码为 Objective-C++。

但现在,我想在我的项目中使用 RegexKitLite。我发现 RegexKitLite 在 Objective-C++ 模式下会出现编译错误,但在 Objective-C 模式下或在“根据文件类型”中自动确定时编译正确模式。

我的问题是:

  1. 如何设置单个头文件编译为C++? (我在Identity and Type中将File Type设置为“C++ Header”,但是没有看到效果。

  2. 如何使用“Objective-C++”中的RegexKitLite?

【问题讨论】:

    标签: objective-c xcode header-files objective-c++ regexkitlite


    【解决方案1】:

    头文件不是编译单元(它们不是自己编译的,只是包含在其他文件中),所以设置类型对编译没有任何影响。

    如果您包含某个 C++ 编译文件的头文件,它将使用 C++ 编译器进行编译。 同样,如果你包含与 Objective-C 文件完全相同的头文件,它将被 Objective-C 编译器编译。

    【讨论】:

      【解决方案2】:

      默认情况下标题不是特定的。 .cpp 使用 cpp 编译器和 .mm obj c。 所以如果你有错误可能是因为你使用了一个无法在objective c中编译的c++(但我认为不可能) 最好猜测您在 C++ 标头中使用包含 obj c 声明的标头。

      分离您的代码以仅在 cpp 文件中包含符合 c++ 的代码

      【讨论】:

      • 我记得.m 文件是Objective-C,而.mm 文件是Objective-C++?
      • 因为我使用 stl::map 来声明某种类型,所以我需要在头文件中包含
      • 我不认为在 obj c ++ 文件中包含地图是危险的。也许你在 obj c (non c++) 文件中使用它?
      猜你喜欢
      • 2012-10-26
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      相关资源
      最近更新 更多