Ваша функция имеет ту же подпись, что и уже определенная.Вот почему компилятор жалуется на неоднозначную перегрузку.Ваша функция пытается определить функцию для потоковой передачи всего в ostream.Эта функция уже существует в библиотеке стандартов.
template <typename T>
std::ostream& operator<< (std:: ostream& o, const T& value){
return o << value;
}
Что вы, возможно, захотите сделать, - это написать функцию, которая определяет, как BinTree направляется (ко всему).Обратите внимание, что тип потока является шаблонным.Таким образом, если вы объединяете вызовы с оператором потока, он передает конкретный тип.
template <typename T, typename U>
T& operator<< (T& o, const BinTree<U>& value){
//Stream all the nodes in your tree....
return o;
}