Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法识别的模板声明/定义_C++_Templates - Fatal编程技术网

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

C++ 无法识别的模板声明/定义,c++,templates,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)

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

这是我的头文件:

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();
};
模板
类堆
{
私人:
类节点{
E数据;
节点*左;
节点*右;
};
节根;
整数长度;
E*预排序(E*列表、整数长度、节点);
E*inoder(E*list,int-length,Node);
E*后序(E*列表,整数长度,节点);
void clear(Node Node);//递归地清除所有节点并释放所有指针
公众:
Heap();
堆(E*list,int-length);
~Heap();
Node*getRoot();
void buildHeap(E*list,int-length);
E*返回列表();
};
以及讨论中的具体功能(尽管其他方面也有类似的错误)。第二行有错误

template <typename E>
Node<E> * Heap<E>::getRoot() {
    return &root;
}
模板
节点*堆::getRoot(){
返回&根;
}

编译器正在抱怨
节点
;全局范围中没有名为
节点的模板。代码必须说明它是成员模板:

template <typename E>
typename Heap<E>::Node * Heap<E>::getRoot() {
    return &root;
}
模板
typename堆::节点*堆::getRoot(){
返回&根;
}

您需要一个
类型名
。或者,如果他正在使用C++11,您可以执行
Heap::getRoot()->Node*
。@0x499602D2-添加
typename
。谢谢我通常的方法是省略它,看看编译器是否会抱怨。