C ++模板访问私有字段

时间:2018-10-06 02:21:17

标签: templates tree binary

我正在尝试使用AVL Tree实现Counter set类,我有一个名为Node的结构,起初我在Counter类中有一个私有字段,名为“ Node”的结构,第一个问题是它没有不要让我执行“ Node * root”,而是必须为其提供另一种类型“ N”,如下面的代码所述。当前,当我尝试创建一个Counter对象时,它说类型“ Node”是未定义的,这是在我尝试执行“ Counter”之后。所以我的问题如下。我想创建一个Counter set类,并允许节点支持任何类型的一个数据字段,但是我希望我的根节点为Node *类型,尽管如果我需要使用另一个模板,该如何处理?关于那件事?我愿意就此提出任何解决方案。

编辑:我只是将struct定义放在Node之前,然后取出第一个类型名N,所以现在可以使用了。

template<typename N, typename T>
class Counter
{
private:

    N *root; // root of the counter tree
    int height; // the height of the main tree
    int numNodes; // number of nodes int he entire tree

    typedef struct Node {
        Node *left; // pointer to the left node in the tree
        Node *right; // pointer to the right node in the tree
        int sizeL; // size of the left subtree 
        int sizeR; // size of the right subtree
        T data; // the data that's stored in each node

        Node(const T &val, Node *lft = nullptr, Node *rt = nullptr, int &lSize = 0, int &rSize = 0)
            : data(val), left(lft), right(rt), sizeL(lSize), sizeR(rSize) {

        }

    } Node;


#include "Counter.h"
using namespace std;

int main() {


    Counter<Node, int> c = Counter<Node, int>();




    system("PAUSE");
    return 0;
}

0 个答案:

没有答案