比方说,我创建一个类二叉树,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。 –