2012-09-20 10 views
5

私はいくつかのオブジェクトを保持するためにC++標準ライブラリの配列コンテナを使うプログラムを書いています。しかし、いつでも私は私のプログラムに次のコード行を含めるようにしてみてください。Mac OSX 10.7.4、Xcode 4.4.1、no <array>ヘッダーファイル?

#include <array> 

私は、コンパイル時に次のエラーが表示されます。#includeをコメントアウト

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$ 

は私がうまくコンパイルすることができます。確かに私は単純なものを見落としていますか? Xcodeに「コマンドラインツール」をインストールしましたが、まだ何か不足していますか?

EDIT:

私は何をすべき、ということを知って私のコンピュータ

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

上のアレイの場所を発見しましたか?

答えて

4

<array>がC++ 11で提供されている場合は、有効にするには-std=c++11フラグを指定し、対応するライブラリに-stdlib=libc++フラグを指定する必要があります。しかし、Xcodeが提供するg ++は古く、C++ 11をあまりサポートしていません。 clangに切り替えることができますか?

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

この応答ボックスで正しくフォーマットされたコードを取得できません。また、そのコマンドを使用するとエラーが発生します。 –

+0

@JeffersonH​​udson:あなたはどこかに貼り付けることができます。 http://pastie.org/。 – kennytm

+0

コメントボックスは書式を取り除きます。これは私がclang ++を使用すると私のエラーです。-std = C++ 11 mms.cpp -o mms http://pastie.org/4761513 –

5

ルックスからは、LLVMのlibC++ではなく、GCCのlibstdC++を使用しています。

、後者の文脈で使用することをstd::arrayを使用する:

#include <tr1/array> 

あなたはlibcの++とC++ 11を使用したい場合は、KennyTMは(1)を示唆するように、あなたのコンパイラフラグを変更します。

+0

どうもありがとうございます。私の質問に気にならない場合は、からに変更するとファイルがどこにあるのかわかりますか? –

+1

@JeffersonH​​udsonそれは歴史的な理由からです。 tr1は2003年に最初に追加されたライブラリの拡張です。これは 'std :: array'がC++標準ライブラリの一部になったときです。 libC++はまったく新しいもので、標準ライブラリ(C++ 11)のより現代的な表現としてレイアウトされています。 osxには2つの標準ライブラリがあります - libC++はC++ 11用に設計されています。 Kennyが指摘したコマンドラインオプションは、 '#include'検索パスを変更します。 GCCのlibstdC++ on osxは少し古いです(下位互換性が必要な場合は悪くない) - 'std :: array'をサブディレクトリ' tr1/'に配置しました。 – justin

+1

お役立ち情報ありがとうございました! –

関連する問題