2017-09-06 42 views
1

我的node班需要相應的linked班才能成爲朋友。我寫它作爲如何將我的類的朋友聲明爲模板實例化?

template <typename T> 
class node{ 
    T value; 
    node<T> *next; 
    friend class linked<T>; 
}; 

template <typename T> 
class linked{ 
    linked(); 
    ~linked(); 
    node<T> *head; 
}; 

我得到一個編譯錯誤抱怨linked不是類模板。我如何聲明linked<T>成爲node<T>的朋友?

回答

3

如果你想的linked實例化具有相同的模板參數T是朋友,你需要在轉發首先聲明類模板linked

// forward declaration 
template <typename T> 
class linked; 

template <typename T> 
class node { 
    ... 
    friend class linked<T>; 
    // or since C++11 you can 
    friend linked<T>; 
}; 

template <typename T> 
class linked { 
    ... 
}; 
0

的錯誤是,在聲明friend class linked<T>;出現時,linked類尚未宣佈。在class node之前添加以下內容。

template <typename T> 
class linked; 
1

您必須在Node類中使用它之前聲明鏈接如下。但是你的代碼看起來比這個問題更混亂。我不確定你在嘗試什麼。

template <typename T> 
class linked; 

template <typename T> 
class node{ 
    private: 
    T value; 
    node<T> *next; 
    friend class linked<T>; 
};