2009-11-27 23 views
8

Nasıl çalıştığını anlamak için iç içe yerleştirilmiş yineleyici sınıfı ile bir liste nesnesi oluşturmaya çalışıyorum. Bazı yöntemlerde, bir yineleyici nesnesini döndürmeye çalışıyorum ama çalışmıyor.C++ iç sınıflı sınıfı temel sınıf sorununda şablonla döndürme

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

hata bu çizgilerin yakındır: Sorunu göstermek için bir örnek oluşturdu

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

Bir Eksik derleyici söylüyor; A :: B :: returnThis()

Bu sorunu günlerce çözmeye çalışıyorum ve çalışmasını sağlamanın bir yolunu bulamıyorum ... Gerçekten biraz yardım isterim. Şimdiden teşekkürler!

cevap

13

Sen typename gerekir:

typename A<T>::B 

A<T>::B türüdür derleyici belirtmek için. İşte bir good explanation neden. B nedir

A<T> ne, bu bağımlılık denir bağlıdır. Bir sınıf veya yapının dışında bir tür aldığınızda ve bir şablona bağlı olduğunuzda, typename'u kullanmanız gerekir.

+0

Çok teşekkür ederim! @ Typename bir göz atacağım! –

+0

Sorun değil. :) – GManNickG