template<class object> Tree<object>::expTree(Tree<object> *&T); // ERROR
//^^^^^^^^^^^^^^ cause of the error
Этот шаблон функции на самом деле является бесплатной функцией и станет другом класса Tree
.Так что это должно быть записано как:
template<class object> expTree(Tree<object> *&T);
То есть удалите Tree<object>::
из декларации.Я только что понял, что в нем отсутствует тип возвращаемого значения, и я предполагаю, что вы подразумеваете Tree<object>
в качестве возвращаемого типа (а Tree<object>::
- это опечатка в вашем коде)Если так, то напишите это:
template<class object> Tree<object> expTree(Tree<object> *&T);
Я хотел бы прокомментировать ваш стиль именования параметров и аргументов шаблона.Обычно используется T
, U
, V
и т. Д. Для параметров шаблона, а не для аргумента функции.Так что приятно, когда вы пишете декларацию как:
template<class T> Tree<T> expTree(Tree<T> *&object);
Ну, я просто поменял имена.