【问题标题】:including C/C++ headers in Xcode 4包括 Xcode 4 中的 C/C++ 头文件
【发布时间】:2012-02-11 12:26:24
【问题描述】:

我在使用 Xcode 3 构建的项目上一直使用 C++ 库没有问题,但现在我在使用 Xcode 4 构建的项目上遇到了构建问题。

将库拖放到 Xcode 4 项目中,它可以正常构建,但是一旦我 #include 它,我就会收到“词法或预处理器问题”错误,更具体地说,“找不到‘字符串’文件,在第 4 行它的主头文件。

仔细检查,错误指出'string' file not found in ~/my project's directory/include/mainheader.h

我已经尝试了here 列出的解决方案,但都没有奏效。

所以它认为头文件在我的项目目录中,但它显然是一个 C/C++ 头文件……我如何告诉 Xcode 查找这些 C/C++ 头文件?

【问题讨论】:

  • 你使用的是#include "string.h"还是#include <string.h>?有区别。
  • 库使用#include <string>
  • 不应该是#include <string.h>吗?我从来没有听说过在 c++ 中只包含一个名为“string”的文件
  • 这是合法的,它是一个类模板(见here),Xcode 3 不认为这是一个问题,所以这与 Xcode 4 有关。
  • 尝试检查您的构建阶段和设置,并确保文件编译为 C++ 而不是 C。

标签: c++ c xcode4 header string.h


【解决方案1】:

有问题的#include 位于我的ViewController.mm 的顶部,我已经通过将.mm 作为其扩展名将其变成了Objective-C++。但是ViewController.mm 最终会被AppDelegate.m 导入,默认情况下它是Objective-C——我忘了​​把它变成Objective-C++,因此出现了问题。

所以将AppDelegate.m 重命名为AppDelegate.mm 解决了这个问题。

【讨论】:

    【解决方案2】:

    我认为#include 是一个 c++ 类模板。所以您需要在头文件中使用 using namespace std 并将源文件 .m 格式重命名为 .mm 格式。

    它对我有用 :) 试试这个...

    【讨论】:

    • 我不熟悉 xCode 和 OSX/iOS 开发,但是这种说法 - #include is a c++ class template - 绝对不正确。
    • C++ 标准模板库 (STL) 包含一个用于多个计算机科学课程的字符串类。检查这个 :: bgsu.edu/departments/compsci/docs/string.html cplusplus.com/reference/string/string/string cplusplus.com/reference/string/string
    • 谢谢,但您的链接都没有显示解释。这个页面的最后有:cplusplus.com/doc/tutorial/templates
    • using namespace ANYTHING; 放在标题中不是一个好主意。在这种情况下,有命名空间是没有意义的。
    • @saif 您的解决方案(重命名源文件)可能是正确的,但答案有点令人困惑。 std::string 不是模板,而是一个类。我想你的意思可能是“类声明”。 #include 是一种读取其他文件的方法,无论其内容如何。
    猜你喜欢
    • 1970-01-01
    • 2020-03-11
    • 2017-01-16
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多