コンパイル時に次のようなコードが表示されます。この問題は、オーバーロードされた挿入演算子(つまり、演算子< <())内にconst_iteratorを作成した時点で発生しています。 setのテンプレート引数バージョンは正しくないと思います。誰もがピッチをしてこのコードを動作させることができますか?STLのstd :: setコンテナパラメータがオーバーロードされた演算子<<()
#include <iostream>
#include <set>
using namespace std;
class A {
public:
int _i;
A(int i) : _i(i) {}
bool operator < (A a) const { return _i < a._i; }
};
class compA {
public:
bool operator()(A a1, A a2) const { return (a1._i > a2._i); }
};
template<class T, class C>
std::ostream& operator << (std::ostream& os, const set<T, C>& s) {
std::set<T, C>::const_iterator itr = s.begin();
for (int i = 0; i < s.size(); i++) {
os << *itr++ << " ";
}
return os;
}
int main() {
set<A, less<A> > s1;
set<A, compA> s2;
s1.insert(A(9)); s1.insert(A(3)); s1.insert(A(-5)); s1.insert(A(3));
s2.insert(A(2)); s2.insert(A(1)); s2.insert(A(7));
cout << s1;
cout << s2;
}
[GCC-4.7コンパイルエラー]の重複可能性があります(http://stackoverflow.com/questions/10155571/gcc-4-7-compilation-error) – Nawaz
重複する可能性のあるトピックを参照してください。 '<'の2つのオブジェクトを比較するために '<'を使います。彼が持っている@Nawaz – Nawaz
。私は彼が 'operator <<(A)'を宣言するのを忘れたと思う。 –