2009-11-27 14 views
8

Ich versuche ein Listenobjekt zu erstellen, mit der Iterator-Klasse geschachtelt, um zu verstehen, wie es funktioniert. In einigen Methoden versuche ich ein Iterator-Objekt zurückzugeben, aber es funktioniert nicht. Ich habe ein Beispiel, das Problem zu zeigen:C++ zurückgegeben geschachtelte Klasse mit Vorlage auf Basisklasse Problem

// CLASS A 
template <class T> 
class A 
{ 
    public: 
     class B; 
     A(){} 
}; 

// CLASS B 
template <class T> 
class A<T>::B 
{ 
    private: 
     int varB; 

    public: 
     B(B& b); 
     B(const int&); 
     B returnThis(); 
}; 

template <class T> 
A<T>::B::B(const int& value) 
{ 
    varB = value; 
} 

template <class T> 
A<T>::B::B(B& b) 
{ 
    varB = b.varB; 
} 

template <class T> 
A<T>::B A<T>::B::returnThis() 
{ 
    return *this; 
} 

// MAIN 

void main() 
{ 
    A<int>::B classB(10); 
} 

Der Fehler ist in der Nähe dieser Linien:

template <class T> 
A<T>::B A<T>::B::returnThis() 

Der Compiler sagt mir, ich bin fehlt; vor A :: B :: returnThis()

Ich versuche, dieses Problem seit Tagen zu lösen, und ich kann keinen Weg finden, es zum Funktionieren zu bringen ... Ich würde wirklich etwas Hilfe schätzen. Vielen Dank im Voraus!

Antwort

13

Sie benötigen typename:

typename A<T>::B 

an die Compiler, um anzuzeigen, dass A<T>::B ein Typ ist. Hier ist ein good explanation warum.

Was B ist, hängt davon ab, was A<T> ist, heißt dies Abhängigkeit. Jedes Mal, wenn Sie einen Typ aus einer Klasse oder Struktur erhalten und dieser von einer Vorlage abhängig ist, müssen Sie typename verwenden.

+0

Vielen Dank! Ich werde @ typename sehen! –

+0

Kein Problem. :) – GManNickG

Verwandte Themen