2009-11-27 5 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

ありがとうございます!私はlook @ typenameを持っています! –

+0

問題ありません。 :) – GManNickG

関連する問題