无法识别的模板声明/定义

时间:2016-01-15 22:07:56

标签: c++ templates

我试图实现一个堆,但我的一个函数上面出现了上述错误。

这是我的头文件:

template <typename E>
class Heap
{
private:
    class Node {
        E data;
        Node * left;
        Node * right;
    };

    Node root;
    int length;

    E * preorder(E * list, int length, Node node);
    E * inorder(E * list, int length, Node node);
    E * postorder(E * list, int length, Node node);
    void clear(Node node);  //Recursively clears all nodes and frees all pointers
public:
    Heap();
    Heap(E * list, int length);
    ~Heap();

    Node * getRoot();
    void buildHeap(E * list, int length);
    E * returnList();
};

有问题的具体功能(尽管其他人也有类似的错误)。第二行出现错误

template <typename E>
Node<E> * Heap<E>::getRoot() {
    return &root;
}

1 个答案:

答案 0 :(得分:8)

编译器抱怨Node<E>;全局范围内没有名为Node的模板。代码必须说它是成员模板:

template <typename E>
typename Heap<E>::Node * Heap<E>::getRoot() {
    return &root;
}