读书人

类摸板中友元函数在调用是编译通不过解

发布时间: 2012-04-01 17:23:46 作者: rapoo

类摸板中友元函数在调用是编译通不过
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&);

//...


};

读书人网 >C++

热点推荐