类摸板中友元函数在调用时编译通不过
#include <iostream>
#include <string.h>
using namespace std;
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
{
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);
}
//急救
[解决办法]
友元声明,如下加上显式声明吧:
friend T GetData <T> (const DNode <T> &) ;
friend void SetData <T> (DNode <T> &,const T&) ;
或者:
声明为友元时,直接就地实现,连前向声明都省了。