我正在尝试重载此类中的<< operator
,但是编译器给我提供的Pila
不是类型错误(Pila
将是堆栈,即类的名称)。 GetNElem
是我未包含的另一个函数,不用担心。
#include <vector>
#include <iostream>
using namespace std;
template <class T>
class Pila {
private:
vector <T> elem;
public:
/* Pila(){
} */
Pila ( int n ) {
elem.resize(n);
}
void print(ostream & f_out){
for (int i = 0; i < getNElem(); i++)
f_out << elem[i] << " ";
return;
}
};
ostream& operator << (ostream& f_out, Pila p ){
p.print(f_out);
return f_out;
}
最佳答案
Pila
是一个类模板,使用时需要指定模板参数。然后您可以将operator<<
设为功能模板,然后
template <typename T>
ostream& operator << (ostream& f_out, Pila<T> p ){
p.print(f_out);
return f_out;
}
顺便说一句:最好通过引用传递
p
,以避免对包含Pila
的std::vector
进行复制操作,并使print
成为const
成员函数。template <class T>
class Pila {
...
void print(ostream & f_out) const {
for (int i = 0; i < getNElem; i++)
f_out << elem[i] << " ";
}
};
template <typename T>
ostream& operator << (ostream& f_out, const Pila<T>& p ){
p.print(f_out);
return f_out;
}