“标识符未定义”,尝试从私有结构创建函数

时间:2019-06-27 16:00:08

标签: c++ macos visual-studio-code

我正在尝试创建一个函数,该函数将返回我制作的结构,当我尝试定义该函数时,我要引用的节点返回一个错误,提示“标识符未定义”。

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;
        }
    }
}

我已经检查了其他多个类似问题,但主要是代码结构。但是我很确定自己的结构正确。

1 个答案:

答案 0 :(得分:1)

由于splayNode已在类SplayTree中定义,因此您需要将其称为

SplayTree::splayNode

超出类的范围。希望这会有所帮助。