2012-09-20 1 views
5

Ich schreibe ein Programm, das den Array-Container der C++ - Standardbibliothek verwendet, um einige Objekte zu halten. Jedes Mal, wenn ich versuche, die folgende Codezeile in meinem Programm gehört:Mac OS X 10.7.4, Xcode 4.4.1, keine <array> Header-Datei?

#include <array> 

Ich erhalte die folgenden Fehler bei der Kompilierung:

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$ 

die # include-Kommentar aus läßt mich einfach gut kompilieren. Sicher übersehe ich etwas Einfaches? Ich habe die "Command Line Tools" in Xcode installiert, fehlt mir noch etwas?

EDIT:

Ich habe die Lage von Array auf meinem Computer gefunden

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

, dass das Wissen, was soll ich tun?

Antwort

4

<array> wird in C++ 11 zur Verfügung gestellt, müssen Sie das -std=c++11 Flag bereitstellen, um es zu aktivieren, und das -stdlib=libc++ Flag für die entsprechende Bibliothek bereitstellen. Aber das von Xcode bereitgestellte g ++ ist so alt, dass es nicht viel Unterstützung für C++ 11 bietet. Könntest du zum Klängen wechseln?

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

Ich habe Probleme, meinen Code korrekt in dieser Antwortbox zu formatieren. Ich bekomme auch einen Fehler, wenn ich diesen Befehl benutze. –

+0

@ JeffersonHudson: Sie können es irgendwo einfügen, z. http://pastie.org/. – kennytm

+0

Das Kommentarfeld entfernt die Formatierung. Das ist mein Fehler, wenn ich clang ++ -std = C++ 11 mms.cpp -o mms verwende http://pastie.org/4761513 –

5

aus der Sicht von Ihnen, verwenden Sie nicht LLVM libC++, sondern GCC libstdC++.

std::array im letzteren Kontext zu verwenden, verwenden:

#include <tr1/array> 

wenn Sie libC++ und C++ 11 verwenden möchten, dann Compiler-Flags ändern, wie KennyTM vorgeschlagen (+1).

+0

Vielen Dank - wenn Sie nichts dagegen haben, meine Frage, was ändert sich zu tun, dass es zu verstehen, wo sich die Datei befindet? –

+1

@ JeffersonHudson ist es aus historischen Gründen. tr1 ist eine Erweiterung der Bibliothek, die ursprünglich 2003 hinzugefügt wurde. Dies ist der Zeitpunkt, an dem 'std :: array' ein Teil der C++ - Standardbibliothek wurde. libC++ ist brandneu und als moderne Darstellung der Standardbibliothek (C++ 11) ausgelegt. Sie haben also zwei Standard-Bibliotheken auf osx - libC++ ist für C++ 11 konzipiert. Die von Kenny erwähnten Befehlszeilenoptionen verändern die '# include' Suchpfade. GCCs libstdC++ on osx ist jetzt etwas veraltet (keine schlechte Sache, wenn man Rückwärtskompatibilität benötigt) - es hat 'std :: array' in ein Unterverzeichnis' tr1/'gestellt. – justin

+1

Gut zu wissen. Vielen Dank! –