gpt4 book ai didi

c++ - 无法访问派生类 C++ 中的 protected 变量

转载 作者:太空宇宙 更新时间:2023-11-04 12:22:56 24 4
gpt4 key购买 nike

我有一个二叉搜索树作为二叉树的派生类,现在我正在尝试访问我的递归函数的根(在基类中)。但出于某种原因,我不断收到错误消息:

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);
}

我尝试公开根目录以查看会发生什么,但我仍然遇到同样的错误。

任何帮助将不胜感激!

最佳答案

我不知道这是为什么,但是当从模板类进行子类化时,为了访问成员,您需要在它们前面加上基类名称。

len = search( binTree<T>::root, x,len);

我的编译器 Visual C++ 不需要这个,但标准出于某种原因需要这样做。或者,您可以放置​​以下行:

using binTree<T>::root;

在任何需要它的范围内。

编辑: heavyd 告诉我你可以使用这个:

this->root

关于c++ - 无法访问派生类 C++ 中的 protected 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3993492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com