1. ホーム
  2. c++

[解決済み】認識できないテンプレート宣言/定義

2022-02-18 15:07:06

質問

ヒープを実装しようとしているのですが、ある関数で上記のエラーが発生しました。

以下は私のヘッダーファイルです。

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

そして、問題の特定の関数(他の関数でも同様のエラーがありますが)。このエラーは2行目にあります。

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

解決するには?

コンパイラが文句を言う Node<E>という名前のテンプレートはありません。 Node をグローバルスコープで表示します。コードは、それがメンバーテンプレートであることを言わなければならない。

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