我在類中有一個typedef,我想重載operator<<
,因爲它能夠在ostream
中打印它。但是,編譯器無法找到重載的操作符。我該如何聲明它才能起作用?重載<<對於另一個類中的類型
#include <iostream>
#include <set>
using namespace std;
template <class C>
struct K {
typedef std::set<C> Cset;
Cset s;
// and many more elements here
friend ostream& operator<<(ostream& oo, const Cset& ss){
typename Cset::const_iterator it=ss.begin();
oo << "[";
for(; it!=ss.end(); ++it) oo << (*it) << ",";
oo << "]";
return oo;
}
void DoSomething(){
// do something complicated here
cout << s << endl;
// do something complicated here
}
};
int main(){
K <int> k;
k.s.insert(5);
k.s.insert(3);
k.DoSomething();
}
gcc版本4.4.5 20101112(紅帽4.4.5-2)(GCC)
就是爲什麼你想要它定義在類內部,這樣的功能仍看不見外面'結構K'的原因是什麼? – dasblinkenlight
@dasblinkenlight並定義它outid一個好主意?我的意思是,它可以與其他人的一個熟悉的定義碰撞(例如在不同的頭文件中?)無論如何,這似乎工作,非常感謝! –
他的代碼在VC 2010和G ++ 3.3.3上編譯並運行良好3.3.3 – user93353