2011-12-28 17 views
0

をコピーします。バグ++ - STDを返さないC++のset_differenceは::私は以下のようなコードを持っている

typedef std::set<std::string> set_of_strings; 
      set_of_strings s1, s2, result1; 
    some_func() 
    { 
      s1.insert("1-2"); 
      s1.insert("1-1"); 
      s1.insert("3-4"); 
      s2.insert("1-2"); 
      s2.insert("1-3"); 
      s2.insert("3-4"); 

      set_of_strings::iterator s1_begin = s1.begin(); 
      set_of_strings::iterator s1_end = s1.end(); 
      set_of_strings::iterator s2_begin = s2.begin(); 
      set_of_strings::iterator s2_end = s2.end(); 
      set_of_strings::iterator result_begin = result1.begin(); 
      td::insert_iterator<set_of_strings> result_inserter = std::inserter(result1, result_begin); 

      set_difference(s1_begin, s1_end,s2_begin, s2_end,result_inserter); //This is the problem line 
} 

私が手にコンパイルエラーがoverloading ambiguity std::copy(.... ある問題が return copy(first1,last1,result);

よう set_differenceリターンです

set_differenceのアルゴリズムについては、hereを確認してください。以下のような

set_differenceリターン:

copy(..) 

それはstd::copyどんな問題はないだろうある場合。

私は以下のようなブロックの中に私の文を入れてみました:

{ 
using namespace std; 
set_difference(s1_begin, s1_end,s2_begin, s2_end,result_inserter); 
} 

が、これは動作しません。 問題は私たちが独自の目的のために書いたコピー機能であり、多くの場所で使用されていることがわかりました。ここではstd::copyを使用します。 誰でも助けてもらえますか?

+1

[これは正常にコンパイルされます](http://ideone.com/AatQz)だから、問題はあなたが示していないコードにあります。 'set_of_strings'、' s1'、 's2'、' result1'、 'td ::'とは何ですか? *完全な*エラーメッセージは何ですか? – ybungalobill

+0

'set_difference'は' std'名前空間で定義されており、 'std :: copy'も使うべきです。 [this code](http://codepad.org/KZZ8nBDL)をコンパイルできますか?それは何を表示しますか?別の名前空間であなた自身の 'コピー 'を動かすことができますか? – vstm

+0

C++では型が重要です。あなたが話しているオブジェクトの半分は、そのタイプを知らない。 –

答えて

4

コンパイラがstd::copyと同じスコープで見ることができる独自のコピー機能を作成しており、それが候補である可能性がある場合は、あいまいさを引き起こす可能性があります。

ありますが、それはstd::copyを使うように設定することができます魔法のフラグはませんが、私は、名前空間、コンパイラはそれを見つけることができませんあなたが名前空間に独自のコピーを入れてくださいませんusing場合と思いstd::copyに戻ってください。つまり、私は、あなたが反復子を設定するために代わりのcopyを作成したいと思うケースは理解できないと思うし、一般的なものを書いたのであれば、このような曖昧さのエラーの

関連する問題