比方說,我創建一個類二叉樹,BT
,和我有一個類,它描述了樹,BE
的元素,像帶模板班朋友的班級模板,這裏究竟發生了什麼?
template<class T> class BE {
T *data;
BE *l, *r;
public:
...
template<class U> friend class BT;
};
template<class T> class BT {
BE<T> *root;
public:
...
private:
...
};
這似乎工作;不過,我對下面發生的事情有疑問。
我最初試圖申報的朋友,因爲
template<class T> friend class BT;
但它似乎有必要使用U
(或大於T
其他東西)在這裏,這是爲什麼?這是否意味着任何特定的BT
對任何特定的BE
類都是朋友?
模板和朋友的IBM頁面上有不同類型的函數但不包括類的朋友關係的示例(並且猜測語法尚未融合到解決方案中)。我希望瞭解如何獲得我希望定義的朋友關係類型的規範。
這種結構在我的代碼 友元類BT 拋出一個錯誤的朋友線 錯誤:「BT」不是一個模板 即使它後來被宣佈爲 模板類BT { ... } –
所以祕密是我需要轉發申報BT以便使用朋友類BT;行中的BE,但不適用於模板的朋友類BT ;.謝謝您的幫助! –
更具體地說:你必須轉發聲明'模板 BT類;'_before_ BE的定義,然後使用'朋友類BT ;'_side_類BE。 –