2016-06-26 14 views
-4

私はlistaとiteratorの2つのクラスを作成しようとしています。イテレータはクラスリストの友人になります。問題は、クラスのイテレータを宣言すると、このエラーが発生するということです。イテレータはテンプレートクラスではありません。 これらの2つのファイル.hはテンプレートクラスではありません

リスタの.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

'友人クラスイテレータ;'おそらく 'テンプレート友人クラスイテレータ;'であるべきです。 –

+1

@BoPerssonどのように? 'T'はクラスのテンプレートパラメータです。問題は 'iterator'がこの時点で定義されていないことです(' friend class iterator ')。前方宣言を使用してください。 – Nelfeal

+0

@Nelxiostテンプレートパラメータは_inherited_ではありません。 –

答えて

-1

iteratorはすでにC++標準ライブラリで使用されていますそのため、できるだけコード内で変数と型を命名しないようにしてください。

+1

残念ですが、これはコメントです。質問に対する答えではありません。 – WhozCraig

+0

ありがとう、私はそうしなければならないと思います。 –

0

iterator<T>と宣言する必要がありますので、lista<T>はそれが存在することを知っています。

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

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

必要ではないが、私はlistaの内部クラスとしてlistaためのイテレータを実装するお勧めします。それでカジュアルな読者には、反復子は包含クラスの反復子として意図されていることは明らかです。

関連する問題