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;
}