2016-06-26 14 views
-4

Ich versuche, zwei Klassen zu erstellen: lista und iterator. Iterator wird ein Freund der Klassenliste sein. Das Problem ist, dass wenn ich den Klasseniterator deklariere ich diesen Fehler erhalte: Iterator ist keine Vorlagenklasse. Diese sind die beiden file.hist keine Vorlagenklasse

lista .h:

*#include "nodo.h"* 

template <class T> 

class lista{ 

public : 

    //all the function 

private : 
    nodo<T> *list; 
    nodo<T> *tail; 
    int n; 


    friend class iterator<T>; 


}; 

iterator.h:

*#include "lista.h"* 

template<class Z> 

class iterator { 

public : 

    lista<Z> a; 
    iterator(); 
}; 
+1

'Freund Klasse Iterator ;' sollte wahrscheinlich 'Vorlage Freund Klasse Iterator;'. –

+1

@BoPersson Wie so? 'T' ist der Vorlagenparameter der Klasse. Das Problem ist, dass 'iterator' zu diesem Zeitpunkt nicht definiert ist (bei' friend class iterator '). Verwenden Sie die Vorwärtsdeklaration. – Nelfeal

+0

@Nelxiost Template-Parameter werden nicht _inherited_. –

Antwort

-1

Der Name iterator wird bereits von der C++ verwendet werden Standard-Bibliothek Versuchen Sie also, Ihre Variablen und Typen so weit wie möglich in Ihrem Code zu benennen.

+1

Hervorragend, aber das ist ein Kommentar; nicht die Antwort auf die Frage. – WhozCraig

+0

Danke, ich denke, ich hätte es so machen sollen. –

0

Sie müssen weiterleiten deklarieren iterator<T> so lista<T> weiß, dass es existiert.

// Forward declaration of iterator<T> 
template <class T> 
class iterator; 

template <class T> 
class lista { 
    ... 
    friend class iterator<T>; 
}; 

Obwohl es nicht notwendig, empfehle ich für lista als innere Klasse von lista einen Iterator implementieren. Für den gelegentlichen Leser ist es dann offensichtlich, dass der Iterator als Iterator für die enthaltene Klasse gedacht ist.

Verwandte Themen