Задача: есть базовый класс (Element), есть наследник (Vertex), наследник должен выводить информацию через <<, в наследнике должен быть вызов оператора << в родительском классе, дабы и его родитель мог вывести информацию о себе. Для этого использую полиморфизм (Element)Vertex :
template <typename Type>
class Element
{
friend ostream& operator<<(ostream& Out, Element<Type>& Source)
{
Out<<"Stuff from Element";
return Out;
};
};
template <typename Type>
class Vertex : public Element<Type>
{
friend ostream& operator<<(ostream& Out, Vertex<Type>& Source)
{
return Out<<(Element<Type>)Source<<" and some stuff from Vertex";
};
};
При сборке строка
return Out<<(Element<Type>)Source<<" and some stuff from Vertex";
«no match for 'operator<<' in Out << Element<int>(тут очень много букв)».
Вроде бы оператор<< в родительском классе объявлен. Что я делаю не так, и как делать правильно?