Dlaczego nie mogę użyć tego samego parametru szablonu dla funkcji znajomego, która przyjmuje argument szablonu? Mam na myśli poniższy kod jest OK!operator << (ostream & os, ...) dla klasy szablonów
template <class Vertex>
class Edge
{
template <class T>
friend ostream& operator<<(ostream& os, const Edge<T>& e);
/// ...
};
template <class T>
ostream& operator<<(ostream& os, const Edge<T>& e)
{
return os << e.getVertex1() << " -> " << e.getVertex2();
}
Ale ten NIE jest w porządku. Czemu? Jaki jest problem? (Otrzymuję błąd linkera.)
template <class Vertex>
class Edge
{
friend ostream& operator<<(ostream& os, const Edge<Vertex>& e);
/// ...
};
template <class T>
ostream& operator<<(ostream& os, const Edge<T>& e)
{
return os << e.getVertex1() << " -> " << e.getVertex2();
}
Jeden przyjaciel jest szablon, drugi jest nie. – Xeo