2016-04-28 14 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'バージョンを使用しようとしていますか?そして、ここに 'using namespace'の危険性があります:あなたは(概念的な)グローバルシンボル空間に浮かぶ両方のバージョンを持っています。私はこれが正規表現にも当てはまると信じています。 'std'バージョンを使用してください。完全修飾(' namespace'を使用しないでください)が望ましいです。 –

+0

私はboostライブラリを学習しています – linuxD

+4

'std'に受け入れられたライブラリの部分との競合を招待しているときは' using namespace'を止めてください。そのため、 'boost ::'や 'std ::'という接頭辞を使って曖昧さを解消する必要があります。これは、とにかく 'using namespace'と入力しなくてもかまいません。 –

答えて

9

boost::arraystd::arrayは、異なる名前空間でスコープされるため、あいまいではありません。

あなたは:

using namespace boost; 
using namespace std; 

あなたは両方のこれらの名前空間内のシンボルをルックアップするためにコンパイラに指示。しかし、コンパイラは現在arrayと入力したときにどのarrayが話しているのか分かりません。それはboost::arrayであるか、またはstd::arrayである可能性があります。したがって、あいまいです。

あなたはusing namespace std;の除去によって、または、あなただけではなく、arrayboost::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 .

関連する問題