J'ai une classe de base semblable au code ci-dessous. Je tente de surcharger < < à utiliser avec cout. Cependant, g ++ est dit:déclaration d'ami déclare une fonction non-modèle
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
J'ai essayé d'ajouter <> après < < dans la déclaration de classe/prototype. Cependant, je l'obtiens does not match any template declaration
. J'ai essayé de faire en sorte que la définition de l'opérateur soit entièrement modélisée (ce que je veux), mais j'ai seulement réussi à l'utiliser avec le code suivant, avec l'opérateur instancié manuellement.
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;
}
Je veux avoir tout cela ou similaire dans l'en-tête, 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;
}
J'ai lire ailleurs en ligne que mettre <> entre < < et() dans le prototype devrait répare ça, mais ce n'est pas le cas. Est-ce que je peux obtenir ceci dans un modèle simple de fonction?
C'est exactement le problème résolu par Dan Saks' [expression de "faire de nouveaux amis"] (http://en.wikibooks.org/wiki/More_C % 2B% 2B_Idioms/Making_New_Friends). _ (Désolé pour le commentaire en retard.) _ –