Похоже, вы пропустили два return
: s в блоке if .. else if ..
в find
.
РЕДАКТИРОВАТЬ:
Код следующийпроблема в коде:
template<class T>
Node* Binary_Tree<T>::find(T* dat, Node* current){
if (...) {
..
} else if (*current->data < *dat){
find(dat,current->left);
}else if(*current->data > *dat){
find(dat,current->right);
Здесь вы просто завершаете функцию вызовом find
.У вас есть для включения оператора return
, например:
template<class T>
Node* Binary_Tree<T>::find(T* dat, Node* current){
if (...) {
..
} else if (*current->data < *dat){
return find(dat,current->left);
}else if(*current->data > *dat){
return find(dat,current->right);
Язык C не похож на lisp и ruby ,где последняя строка блока является неявным значением этого блока.
Тот факт, что это рекурсивный вызов, не делает вызов каким-либо образом особенным, в конце он простопростой вызов, и если вы планируете вернуть значение вызова, вы должны вернуть его явно.