我正在尝试使用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;
}