2012-09-20 62 views
5

我在寫一個程序,它將使用C++標準庫的數組容器來容納一些對象。然而,每當我嘗試包括下面這行代碼在我的程序:Mac OSX 10.7.4,Xcode 4.4.1,no <array>頭文件?

#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 

知道的,我該怎麼辦?

回答

4

<array>在C++ 11中提供,您需要提供-std=c++11標誌來啓用它,併爲相應的庫提供-stdlib=libc++標誌。但是Xcode提供的g ++非常古老,對C++ 11沒有多少支持。你能切換到叮噹聲嗎?

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

我無法在此響應框中正確格式化我的代碼。使用該命令時我也會遇到錯誤。 –

+0

@JeffersonH​​udson:你可以把它粘貼在某個地方http://pastie.org/。 – kennytm

+0

評論框提取格式。這是我使用鏗鏘的錯誤++ -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上有兩個標準庫 - libC++是爲C++ 11設計的。 Kenny提到的命令行選項將改變'#include'搜索路徑。 GCC的osx上的libstdC++現在有點過時了(如果你需要向後兼容,這不是一件壞事) - 它將'std :: array'放在子目錄'tr1 /'中。 – justin

+1

很高興知道。謝謝! –