2016-06-26 33 views
-4

我想創建兩個類:lista和iterator。迭代器將成爲班級名單的朋友。問題是,當我聲明類迭代器時,我得到這個錯誤:迭代器不是模板類。 這是兩個file.h不是模板類

LISTA .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

'朋友類迭代器;'應該是'template 朋友類迭代器''。 –

+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。對於臨時讀者來說,顯然迭代器意味着包含類的迭代器。