2012-09-20 7 views
5

Piszę program, który będzie używał kontenera tablic Biblioteki Standardowej C++ do przechowywania niektórych obiektów. Jednak, gdy staram się zawierać następujący wiersz kodu w moim programie:Plik nagłówkowy Mac OSX 10.7.4, Xcode 4.4.1, nr <array>?

#include <array> 

otrzymuję następujący błąd podczas kompilacji:

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$ 

zakomentowanie #include pozwala mi skompilować dobrze. Z pewnością przeoczyłem coś prostego? Zainstalowałem "Narzędzia wiersza poleceń" w Xcode, czy nadal czegoś brakuje?

EDIT:

znalazłem lokalizację tablicy na moim komputerze

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

wiedząc, że, co mam zrobić?

Odpowiedz

4

jest dostarczany w języku C++ 11, należy podać flagę -std=c++11, aby ją włączyć, i podać flagę -stdlib=libc++ dla odpowiedniej biblioteki. Ale g ++ dostarczany przez Xcode jest tak stary, że nie ma wiele wsparcia dla C++ 11. Czy możesz przełączyć się na klang?

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

Mam problem z prawidłowym sformatowaniem mojego kodu w tym polu odpowiedzi. Otrzymuję również błąd podczas używania tego polecenia. –

+0

@JeffersonHudson: Możesz go gdzieś wkleić, np. http://pastie.org/. – kennytm

+0

Pole komentarza usuwa formatowanie. To jest mój błąd, gdy używam clang ++ -std = C++ 11 mms.cpp -o mms http://pastie.org/4761513 –

5

na podstawie jego wyglądu nie używasz biblioteki libC++ LLVM, ale biblioteki libstdC++ GCC.

używać std::array w tym ostatnim kontekście użycia:

#include <tr1/array> 

jeśli chcesz używać libC++ i C++ 11, a następnie zmienić swoje flagi kompilatora jak sugeruje KennyTM (+1).

+0

Dziękuję bardzo - jeśli nie masz nic przeciwko temu, co pytam, co to jest zmiana na , która powoduje, że rozumie, gdzie znajduje się plik? –

+1

@JeffersonHudson to ze względów historycznych. tr1 jest rozszerzeniem biblioteki, początkowo dodanym w 2003 r. - to jest, gdy 'std :: array' stał się częścią standardowej biblioteki C++. libC++ jest zupełnie nowy i jest przedstawiany jako bardziej współczesna reprezentacja standardowej biblioteki (C++ 11). więc masz dwie standardowe biblioteki na osx-libC++ przeznaczone dla C++ 11. opcje linii poleceń, o których wspomniał Kenny, zmienią ścieżki wyszukiwania "# include". GCC's libstdC++ na osxie jest teraz trochę przestarzały (nie jest źle, jeśli potrzebujesz kompatybilności wstecznej) - umieścił 'std :: array' w podkatalogu' tr1/'. – justin

+1

Dobrze wiedzieć. Dziękuję Ci! –