类摸板中友元函数在调用是编译通不过
template <class T>
class DNode
{
private :
T data ;
DNode *left,*right ;
public :
DNode() ;
friend T GetData(const DNode <T> &) ;
friend void SetData(DNode <T> &,const T&) ;
};
template <class T>
DNode <T> ::DNode()
{
left = right = this ;
};
template <class T>
T GetData(const DNode <T> & dn)
{
return dn.data ;
};
template <class T>
void SetData(DNode <T> &dn,const T&item)
{
dn.data = item ;
return ;
};
void main()
{
DNode <int> node;
SetData(node,8);//在此处调用友元函数会出错
}
//同志们,请解答下
[解决办法]
模板类的模板友元函数需要前置声明
---------------------------
//forward declaration
template <class T> class DNode;
template <class T> T GetData(const DNode <T> &);
template <class T> void SetData(DNode <T> &, const T&);
template <class T>
class DNode
{
//...
//Error
//friend T GetData(const DNode <T> &);
//friend void SetData(DNode <T> &, const T&);
//OK
//friend T GetData <T> (const DNode <T> &);
//friend void SetData <T> (DNode <T> &, const T&);
//OK
//friend T GetData <> (const DNode <T> &);
//friend void SetData <> (DNode <T> &, const T&);
//OK
//friend T GetData <> (const DNode&);
//friend void SetData <> (DNode&, const T&);
//...
};