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

6

我正在尝试实现一个堆,但是我的一个函数出现了上述错误。

这是我的头文件:

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

需要翻译的内容是关于IT技术的,涉及到特定函数(虽然其他函数也有类似错误)。错误出现在第二行。

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

10

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

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

你需要在那里加上一个 typename。或者如果他正在使用 C++11,你可以这样做:Heap<E>::getRoot() -> Node<E>* - David G
@0x499602D2 - 添加了 typename。谢谢。我的常规做法是将其省略,看编译器是否会报错。 - Pete Becker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接