Оператор перегрузки << для шаблонного класса
Я пытаюсь реализовать метод для двоичного дерева, которое возвращает поток. Я хочу использовать поток, возвращенный в методе, чтобы показать дерево на экране или сохранить дерево в файле:
Эти два метода находятся в классе двоичного дерева:
Объявления:
void streamIND(ostream&,const BinaryTree<T>*);
friend ostream& operator<<(ostream&,const BinaryTree<T>&);
template <class T>
ostream& operator<<(ostream& os,const BinaryTree<T>& tree) {
streamIND(os,tree.root);
return os;
}
template <class T>
void streamIND(ostream& os,Node<T> *nb) {
if (!nb) return;
if (nb->getLeft()) streamIND(nb->getLeft());
os << nb->getValue() << " ";
if (nb->getRight()) streamIND(nb->getRight());
}
Этот метод находится в классе UsingTree:
void UsingTree::saveToFile(char* file = "table") {
ofstream f;
f.open(file,ios::out);
f << tree;
f.close();
}
Поэтому я перегрузил оператор «<<» класса BinaryTree для использования: cout << tree и ofstream f << tree, но я получаю следующее сообщение об ошибке: неопределенная ссылка на `operator << (std :: basic_ostream> &, BinaryTree &)»
Постскриптум В дереве хранятся объекты Word (строка с целым числом).
Я надеюсь, что вы понимаете мой плохой английский. Спасибо! И я хотел бы знать хороший текст для начинающих о STL, который объясняет все необходимое, потому что я трачу все свое время на ошибки, подобные этой.
РЕДАКТИРОВАТЬ: дерево в saveToFile () объявляется: BinaryTree <Word> дерево.