我正在尝试创建一个函数,该函数将返回我制作的结构,当我尝试定义该函数时,我要引用的节点返回一个错误,提示“标识符未定义”。
template <class T>
class SplayTree
{
private:
struct splayNode
{
T element;
splayNode *leftChild;
splayNode *rightChild;
size_t height;
splayNode(T ele, splayNode left, splayNode right, size_t h = 0)
: element{ele}, leftChild{left}, rightChild{right}, height { h }
};
splayNode * root;
void rotateLeft(splayNode * node);
void rotateRight(splayNode * node);
splayNode splay(splayNode * root, T element);
public:
void insert(T element);
void remove(T element);
bool find(T element);
std::vector<T> preOrderWalk() const;
std::vector<T> inOrderWalk() const;
std::vector<T> postOrderWalk() const;
T getMin();
T getMax();
T getRoot();
size_t size();
};
和定义:
template <class T>
splayNode SplayTree<T>::splay(splayNode * node, T element)
{
if (root == nullptr || root->key == key)
{
return root;
}
if (key < root->key)
{
if (root->left == nullptr)
{
return root;
}
}
}
我已经检查了其他多个类似问题,但主要是代码结构。但是我很确定自己的结构正确。
答案 0 :(得分:1)
由于splayNode
已在类SplayTree
中定义,因此您需要将其称为
SplayTree::splayNode
超出类的范围。希望这会有所帮助。