2012-04-08 15 views
2

私はClangでg ++でうまくコンパイルするC++ライブラリをコンパイルしようとしています。なぜclangはBoost for STLを混乱させますか?

しかし何らかの理由で私はどこでもエラーが発生します。私はstlコンテナを使用しています。エラーメッセージは、私が私とは思わないブーストセットを使用しようとしていると思っていると示唆しているようです。

boostとしてstdと私は何らかの形で別名を付けましたが、実際にはusingというキーワードを使用していません。

/Users/zennatavares/repos/cliques/cliques/../cliques/structures/disjointset.h:140:8: error: too few template arguments for class template 'set' 
       std::set<int> visited_parents_; 
        ^
/usr/local/include/boost/detail/container_fwd.hpp:90:64: note: template is declared here 
    template <class Key, class Compare, class Allocator> class set; 
+3

それでなぜusingステートメントを使って名前空間全体をコードに持ってこないのですか? usingステートメントを削除し、代わりに完全名 "std :: set"を使用してください。 –

+1

@MooingDuck:Um、what 'using'ステートメント?彼はコード内で明示的に 'std :: set'として修飾しています(少なくとも、clangが繰り返す行)。 –

+0

[短く、自己完結型、正しい(コンパイル可能な)、例](http://sscce.org/)と評価されています。あなたはあなたが気づいていないどこかで 'using'ステートメントを持っているかもしれません。 –

答えて

6

私は、問題は名前空間stdのメンバーを宣言転送しようとして後押しし、ブーストはlibcの++のための前方宣言が間違っなっていると信じています。そのようなフォワード宣言を行うための移植可能な方法はありませんので、実際にそれをしてはいけません。名前空間std内のものを宣言すると、未定義の動作が発生します。

これは、これらの問題の1つのためのブーストに対して提出されたバグです。 https://svn.boost.org/trac/boost/ticket/5197

問題を再現する完全なプログラムを投稿した場合、おそらくあなたのケースでこれを修正するために何ができるかについての詳細がわかります。

関連する問題