2016-12-14 116 views
0

我正試圖在Xcode中編寫一個C++程序。 我的代碼似乎沒有什麼問題,但是當我嘗試編譯它,我得到以下錯誤:由於LLVM錯誤,Xcode不會編譯

Implicit instantiation of undefined template 'std::__1::hash<std::1::pair<unsigned long, unsigned long> >' 

這個錯誤會顯然是在LLVM的type_traits文件的1008行。 我認爲這是一些庫錯誤,但是當我試圖編譯一個簡單的Hello World時,它工作正常。

有人知道我錯過了什麼嗎?

回答

2

std::pair(或std::tuple)沒有std::hash專業化。這是C++標準中最荒謬的特徵之一,它扼殺了圖書館。

這可能是因爲您使用std::pair作爲unordered_map中的關鍵字而發生的。

您需要做的是包含boost:<boost/functional/hash.hpp>並聲明boost::hash<std::pair<X, Y>>作爲您的地圖的第三個模板參數。

直到std::hash是固定的,它幾乎沒用。

+0

這正是我正在做的,除了我使用'unordered_set'。現在我只需要了解如何在Xcode中包含Boost庫,我應該很好。 –

+0

boost.functional完全是頭文件,所以你只需要設置包含路徑來指向boost源。 –