C++ 如何访问子类成员

C++ 如何访问子类成员,c++,data-structures,C++,Data Structures,访问子类节点的数据成员时遇到问题 template <class T> class BinarySearchTree { private: class Node { public: T data; Node * left; Node * right; Node * parent; Node() :left(NULL), right(NULL), parent(NULL) {};

访问子类节点的数据成员时遇到问题

template <class T>
class BinarySearchTree {
private:
    class Node {
    public:
        T data;
        Node * left;
        Node * right;
        Node * parent;

        Node() :left(NULL), right(NULL), parent(NULL) {};
        Node(const T& item) {
            data = item;
            left = NULL;
            right = NULL;
            parent = NULL;
        };
    };
模板
类二进制搜索树{
私人:
类节点{
公众:
T数据;
节点*左;
节点*右;
节点*父节点;
Node():左(NULL)、右(NULL)、父(NULL){};
节点(常数T和项目){
数据=项目;
左=空;
右=空;
parent=NULL;
};
};
我正在尝试为此二元搜索树getHeight()和getSize()编写两个函数,但是我需要访问二元搜索树的左右节点(或子节点)才能进行计算。下面是我尝试编写的代码:

template <class T>
int BinarySearchTree<T>::getHeight() const {
    //TODO
    int number = 0;
    Node * heightNode = new Node();
    heightNode = _root;
    if (left == NULL && right == NULL){
        return 0;
    }
    else
    {
        number = max(right->height(), left->height()) + 1;
    }
    return height;
}
模板
int BinarySearchTree::getHeight()常量{
//待办事项
整数=0;
节点*高度节点=新节点();
高度节点=_根;
if(left==NULL&&right==NULL){
返回0;
}
其他的
{
数字=最大值(右->高度(),左->高度())+1;
}
返回高度;
}
我的思考过程是向下两个子树,返回每个子树的最大值来计算高度

template <class T>
int BinarySearchTree<T>::getSize() const {
    // TODO
    int size;
    if (){
        return 0;
    }
    inorderHelper(cout, this->Node->left); //L 
    size++;                               //V
    inorderHelper(cout, this->Node->right);//R
    return size;
}
模板
int BinarySearchTree::getSize()常量{
//待办事项
整数大小;
如果(){
返回0;
}
inorderHelper(cout,this->Node->left);//L
大小+++;//V
inorderHelper(cout,this->Node->right);//R
返回大小;
}

在这里,我的思想过程是对二叉搜索树执行顺序遍历,增加每个节点的大小。

问题是,您试图通过类类型
节点访问非静态成员,而不是通过
节点的实例访问它们。尽管您没有包含足够的相关po
BinarySearchTree
您似乎有一个名为
\u root
的成员,该成员基于其他代码,似乎是树中的根节点。假设这是正确的,则需要更新以下行

inorderHelper(cout, this->Node->left); //L 
size++;                               //V
inorderHelper(cout, this->Node->right);//R
…像这样的事情

inorderHelper(cout, _root->left); //L 
size++;                               //V
inorderHelper(cout, _root->right);//R
不幸的是,这不会给出树的实际大小,因为您的代码不完整

getHeight()
中也存在内存泄漏。以下代码创建了
节点的一个实例
,但在将
\u root
分配给
heightNode
之前从未删除它

Node * heightNode = new Node();
heightNode = _root;
这很可能会更改为

Node * heightNode = _root;

Node*heightNode=新节点();heightNode=\u root;
--泄漏多少?怎么会这样?我应该让heightNode等于根。你打算说你遇到的问题吗?我在这里没有看到任何子类。我正在尝试访问node类,它是二元搜索树的子类。到目前为止运气不好。我一辈子都搞不清楚这一点。
node
是内部类而不是子类。