【问题标题】:Mac OSX 10.7.4, Xcode 4.4.1, no <array> header file?Mac OSX 10.7.4,Xcode 4.4.1,没有 <array> 头文件?
【发布时间】:2012-09-13 01:37:21
【问题描述】:

我正在编写一个程序,它将使用 C++ 标准库的数组容器来保存一些对象。但是,每当我尝试在我的程序中包含以下代码行时:

#include <array>

我在编译时收到以下错误:

75-143-76-177:soft jeffersonhudson$ g++ mms.cpp -o mms
mms.cpp:5:17: error: array: No such file or directory 
75-143-76-177:soft jeffersonhudson$ 

注释掉#include 让我编译得很好。当然,我忽略了一些简单的事情?我已经在 Xcode 中安装了“命令行工具”,我还缺少什么吗?

编辑:

我在我的电脑上找到了数组的位置

/usr/clang-ide/lib/c++/v1

知道了,我该怎么办?

【问题讨论】:

    标签: xcode arrays include g++


    【解决方案1】:

    从外观上看,你使用的不是 LLVM 的 libc++,而是 GCC 的 libstdc++。

    要在后一种情况下使用std::array,请使用:

    #include <tr1/array>
    

    如果您想使用 libc++ 和 C++11,请按照 KennyTM 的建议 (+1) 更改您的编译器标志。

    【讨论】:

    • 非常感谢 - 如果您不介意我的提问,将 更改为 会导致它了解文件的位置?
    • @JeffersonH​​udson 这是出于历史原因。 tr1 是该库的扩展,最初于 2003 年添加——此时std::array 成为 C++ 标准库的一部分。 libc++ 是全新的,它被布置为标准库 (C++11) 的更现代的表示形式。所以你在 osx 上有两个标准库——libc++ 是为 C++11 设计的。 Kenny 提到的命令行选项将改变#include 搜索路径。 osx 上的 GCC 的 libstdc++ 现在有点过时了(如果您需要向后兼容性,这不是一件坏事)——它将 std::array 放在子目录 tr1/ 中。
    【解决方案2】:

    &lt;array&gt;是在C++11中提供的,需要提供-std=c++11标志来启用它,并为对应的库提供-stdlib=libc++标志。但是Xcode提供的g++太老了,对C++11的支持不多。你能切换到clang吗?

    clang++ -std=c++11 -stdlib=libc++ mms.cpp -o mms
    

    【讨论】:

    • 我无法在此响应框中正确格式化我的代码。使用该命令时我也遇到错误。
    • 注释框去除格式。这是我使用 clang++ -std=c++11 mms.cpp -o mms pastie.org/4761513 时的错误
    • 是的,添加 -stdlib=libc++ 标志有效。您是否有一个链接,我可以在其中阅读有关这些标志的作用以及它们如何工作的信息?当然,我会自己四处寻找,只是想知道您是否知道特别的一个。
    • @JeffersonH​​udson 你可以查看man page
    猜你喜欢
    • 1970-01-01
    • 2012-06-26
    • 2012-10-21
    • 1970-01-01
    • 2014-08-18
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    相关资源
    最近更新 更多