У меня есть двоичное дерево поиска как производный класс из двоичного дерева, прямо сейчас я пытаюсь получить доступ к корню для своих рекурсивных функций (который находится в базовом классе). Но по какой-то причине, я получаю сообщение об ошибке:не может получить доступ к защищенной переменной в производном классе C++
binSTree.h:31: error: ‘root’ was not declared in this scope
Вот мои объявления классов:
базового класса:
template <class T>
class binTree {
private:
int height(treeNode<T>*) const; // Recursive method
int size(treeNode<T>*) const; // Recursive method
int leaves(treeNode<T>*) const;
void insert(treeNode<T>*&, const T&);
void clear(treeNode<T>*);
treeNode<T>* copy_tree(treeNode<T>*);
void preOrder(treeNode<T>*, void (*)(T&));
void inOrder(treeNode<T>*, void (*)(T&));
void postOrder(treeNode<T>*, void (*)(T&));
public:
binTree();
binTree(const binTree<T>&);
~binTree();
bool empty() const;
void clear();
void insert(const T&);
int remove(const T&); // Extra credit only
int height() const; // Non-recursive method
int size() const; // Non-recursive method
int leaves() const;
void preOrder(void (*)(T&));
void inOrder(void (*)(T&));
void postOrder(void (*)(T&));
const binTree<T>& operator=(const binTree<T>&);
protected:
treeNode<T>* root;
};
заголовочный файл (в строке 31):
#include "binTree.h"
template<class T>
class binSTree : public binTree<T> {
public:
void insert(const T&);
bool remove(const T&);
bool search(const T&, int&) const;
private:
void insert(treeNode<T>*&, const T&);
bool remove(treeNode<T>*&, const T&);
bool search(treeNode<T>*, const T&, int&);
void remove_root(treeNode<T>*&);
};
template<class T>
void binSTree<T>::insert(const T& x) {
treeNode<T>* newNode = new treeNode<T>(x);
insert(newNode, x);
}
template<class T> // public
bool binSTree<T>::remove(const T& x) {
return remove(binTree<T>.root, x);
}
template<class T> // public
bool binSTree<T>::search(const T& x, int& len) const {
len = 0;
len = search(root,x,len);
}
Я попытался сделать корень общедоступным, чтобы узнать, что произойдет, и у меня все еще такая же ошибка.
любая помощь будет очень признательна!
Можем ли мы увидеть полноту (по крайней мере, до линии 31) binSTree.h пожалуйста? –
уверен, что я могу сделать – rajh2504
И если вы хотите узнать, почему это происходит ... http://www.parashift.com/c++-faq-lite/templates.html#faq-35.19 –