Tengo una clase base similar al código siguiente. Estoy intentando sobrecargar < < para usar con cout. Sin embargo, g ++ está diciendo:declaración de amigo declara una función sin plantilla
base.h:24: warning: friend declaration ‘std::ostream& operator<<(std::ostream&, Base<T>*)’ declares a non-template function
base.h:24: warning: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning
He intentado añadir <> después < < en la declaración de clase/prototipo. Sin embargo, entonces lo entiendo does not match any template declaration
. He estado tratando de tener la definición del operador totalmente personalizada (lo que quiero), pero solo he podido hacer que funcione con el siguiente código, con el operador instanciado manualmente.
base.h
template <typename T>
class Base {
public:
friend ostream& operator << (ostream &out, Base<T> *e);
};
base.cpp
ostream& operator<< (ostream &out, Base<int> *e) {
out << e->data;
return out;
}
quiero ir a tomar tal o similar en la cabecera, base.h:
template <typename T>
class Base {
public:
friend ostream& operator << (ostream &out, Base<T> *e);
};
template <typename T>
ostream& operator<< (ostream &out, Base<T> *e) {
out << e->data;
return out;
}
tengo leer en otro lugar en línea que poniendo <> entre < < y() en el prototipo debería arregla esto, pero no es así. ¿Puedo obtener esto en una plantilla de función única?
eso es exactamente el problema resuelto por Dan Saks' [ "hacer nuevos amigos" modismo] (http://en.wikibooks.org/wiki/More_C % 2B% 2B_Idioms/Making_New_Friends). _ (Perdón por el último comentario.) _ –