[笔记]模版类中重载<<操作符
//text.cpp #include <ostream> using namespace std; template<typename E> class Text() { friend ostream& operator<<(ostream& os, T<E>& te); private: E e; } template<typename E> ostream& operator<<(ostream& os, T<E>& te) { return os<<te.e; }
gcc报错:声明了非模版的友元函数
解决:
1.定义模板友元函数
//text.cpp #include <ostream> using namespace std; template<typename E> class Text() { template<typename E1> friend ostream& operator<<(ostream& os, T<E1>& te); private: E e; } template<typename E1> ostream& operator<<(ostream& os, T<E1>& te) { return os<<te.e; }
2.在模板类中定义,与模板类共用同一个模板
//text.cpp #include <ostream> using namespace std; template<typename E> class Text() { friend ostream& operator<<(ostream& os, T<E>& te) { return os<<te.e; } private: E e; }
结果: