2016-04-28 28 views
-2

我特林使用升壓陣列錯誤: '數組':不明確的符號

,但我得到這個錯誤:

error: 'array': ambiguous symbol

這裏是我的代碼:

#include <iostream> 
#include <boost/array.hpp> 
#include <boost/regex.hpp> 

using namespace boost; 

using namespace std; 



int main(int argc, char* argv[]) 
{ 
    array<int, 10> a{3}; 

    cout << "a[0]= " << a[0]; 

    return 0; 
} 

此錯誤當我包括提升庫時出現

有什麼想法嗎?

+6

'array'被接受了入'std'。爲什麼你仍然在嘗試使用舊的'boost'版本?這裏是'使用名稱空間'的危險:現在你的兩個版本都在(概念性)全局符號空間中浮動。我相信這也適用於'正則表達式'。只需使用'std'版本,最好是完全限定的(不要使用「namespace」)。 –

+0

我正在學習boost庫 – linuxD

+4

因此,當您只是在與被接受到'std'中的庫所部分發生衝突時,停止使用'namespace'。因爲這樣你必須用'boost ::'或'std ::'作爲前綴來消除歧義,你可以也應該這樣做,而不必使用'namespace'直接輸入。 –

回答

9

boost::arraystd::array不是不明確的,因爲它們的範圍是不同的名稱空間。

當你這樣做:

using namespace boost; 
using namespace std; 

你告訴編譯器查找符號了在這兩個命名空間。但編譯器現在不知道當你只輸入array時你正在談論哪個array。它可能是boost::array或它可能是std::array因此它是不明確的。

你可以通過刪除using namespace std;或指定您使用boost版本使用boost::array,而不是僅僅array解決這個問題。


順便說一句我明白努力學習升壓功能,但你不應該去學習boost::array,就在the Introduction to boost::array它告訴你:

std::array is (as of C++11) part of the C++ standard. The differences between boost::array and std::array are minimal. If you are using C++11, you should consider using std::array instead of boost::array .