Compilerfehler beim Deklarieren der Vorlagenfreundklasse innerhalb einer Vorlagenklasse

Ich habe versucht, meine eigene Klasse für verknüpfte Listen zu didaktischen Zwecken zu implementieren.

Ich habe die Klasse "List" in der Iterator-Deklaration als "friend" angegeben, aber sie scheint nicht zu kompilieren.

Dies sind die Schnittstellen der 3 Klassen, die ich verwendet habe:

Node.h:

#define null (Node<T> *) 0

template <class T>
class Node {
 public:
    T content;
    Node<T>* next;
    Node<T>* prev;

    Node (const T& _content) :
        content(_content),
        next(null),
        prev(null)
    {}
};

Iterator.h:

#include "Node.h"

template <class T>
class Iterator {
 private:
    Node<T>* current;

    Iterator (Node<T> *);

 public:
    bool isDone () const;

    bool hasNext () const;
    bool hasPrevious () const;
    void stepForward ();
    void stepBackwards ();

    T& currentElement () const;

    friend class List<T>;
};

List.h

#include <stdexcept>
#include "Iterator.h"

template <class T>
class List {
 private:
    Node<T>* head;
    Node<T>* tail;
    unsigned int items;

 public:
    List ();

    List (const List<T>&);
    List& operator = (const List<T>&);

    ~List ();

    bool isEmpty () const {
        return items == 0;
    }
    unsigned int length () const {
        return items;
    } 
    void clear ();

    void add (const T&);
    T remove (const T&) throw (std::length_error&, std::invalid_argument&);

    Iterator<T> createStartIterator () const throw (std::length_error&);
    Iterator<T> createEndIterator () const throw (std::length_error&);
};

Und dies ist das Testprogramm, das ich ausgeführt habe:

trial.cpp

using namespace std;
#include <iostream>
#include "List/List.cc"

int main ()
{
 List<int> myList;

 for (int i = 1; i <= 10; i++) {
  myList.add(i);
 }

 for (Iterator<int> it = myList.createStartIterator(); !it.isDone(); it.stepForward()) {
  cout << it.currentElement() << endl;
 }

 return 0;
}

Wenn ich versuche, es zu kompilieren, gibt der Compiler mir die folgenden Fehler:

Iterator.h: 26: Fehler: "Liste" ist keine Vorlage

Iterator.h: In der Instanziierung von "Iterator":

trial.cpp: 18: Von hier aus instanziiert

Iterator.h: 12: Fehler: Vorlagenargument für 'struct List' erforderlich

List.cc: In der Member-Funktion "Iterator List :: createStartIterator () const [with T = int]":

trial.cpp: 18: Von hier aus instanziiert

Iterator.h: 14: Fehler: "Iterator :: Iterator (Node *) [with T = int]" ist privat

List.cc:120: Fehler: in diesem Kontext

Scheint, als würde es die Freundschaftserklärung nicht erkennen. Was habe ich falsch gemacht?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage