2009-11-27 111 views
8

我想創建一個列表對象,其中嵌套迭代器類,以瞭解它是如何工作的。 在某些方法中,我試圖返回一個迭代器對象,但它不起作用。 我創建了一個例子來說明這個問題:C++返回嵌套類與基類問題上的模板

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

的錯誤是附近那些線:

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

編譯器告訴我,我錯過了;之前A :: B :: returnThis()

我想解決這個問題幾天,我找不到辦法使它工作... 我真的很感激一些幫助。 在此先感謝!

回答

13

您需要typename

typename A<T>::B 

,以指示編譯器A<T>::B是一種類型。這是一個good explanation爲什麼。

什麼B取決於什麼A<T>是,這就是所謂的依賴關係。無論何時您從類或結構中獲取某個類型,並且依賴於模板,您都需要使用typename

+0

非常感謝!我會看看@ typename! – 2009-11-27 21:33:54

+0

沒問題。 :) – GManNickG 2009-11-27 21:38:29