Deklarasi/definisi template tidak dapat dikenali

Saya mencoba mengimplementasikan heap, tetapi saya mendapatkan kesalahan di atas pada salah satu fungsi saya.

Ini file header saya:

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

Dan fungsi spesifik yang dimaksud (walaupun ada kesalahan serupa pada yang lain). Ada kesalahan di baris kedua

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

person Oren Bell    schedule 15.01.2016    source sumber


Jawaban (1)


Kompiler mengeluh tentang Node<E>; tidak ada templat bernama Node dalam lingkup global. Kode harus menyatakan bahwa itu adalah templat anggota:

template <typename E>
typename Heap<E>::Node * Heap<E>::getRoot() {
    return &root;
}
person Pete Becker    schedule 15.01.2016
comment
Anda memerlukan typename di sana. Atau Anda dapat melakukan Heap<E>::getRoot() -> Node<E>* jika dia menggunakan C++11. - person 0x499602D2; 16.01.2016
comment
@0x499602D2 - ditambahkan typename. Terima kasih. Pendekatan saya yang biasa adalah mengabaikannya dan melihat apakah kompiler mengeluh. - person Pete Becker; 16.01.2016