有很多类似的帖子,但似乎都没有回答我的问题。 我有一个模板化的类(AvlTree),我想在它下面创建一个嵌套类AvlTree :: Node。
因为嵌套类很重,所以我想在一个单独的文件中定义和实现它。但不知何故,它似乎不起作用,并且抛出了一些错误,主要是:
错误C2039:'节点':不是'AvlTree'的成员
我已经添加了两个* .h文件。也许你可以帮助我理解这个问题:
AvlTree.h
#ifndef AVL_TREE_H_
#define AVL_TREE_H_
#include <cstdlib>
template<class Key, class Value>
class AvlTree
{
public:
AvlTree();
~AvlTree();
int insert(Key * key, Value * value);
Value * remove(Key * key);
Value * find(Key * key);
void print();
int clear();
int getHeight();
bool isEmpty() { return _root == NULL; }
private:
class Node<Key, Value>;
typename Node<Key, Value> * _root;
int _height;
};
#endif /* AVL_TREE_H_ */
AvlTreeNode.h
#ifndef AVL_TREE_NODE_H_
#define AVL_TREE_NODE_H_
#include "AvlTree.h"
template<class Key, class Value>
class AvlTree<Key,Value>::Node
{
public:
Node(Key * key, Value * value);
~Node();
int insert(Key * key, Value * value);
Value * remove(Key * key);
Value * find(Key * key);
void print();
int clear();
Value * getValue() { return _value; }
int getHeight() { return _height; }
int getBalance() { return _balance; }
private:
Key * _key;
Value * _value;
Node * _left;
Node * _right;
Node * _parent;
int _height;
int _balance;
void rotateLeft();
void rotateRight();
void rotateLeftRight();
void rotateRightLeft();
};
#endif /* AVL_TREE_NODE_H_ */
我知道有一些代码完全不相关,但我相信整个画面总是好一点。
感谢您的帮助!