读书人

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

发布时间: 2012-02-29 16:44:10 作者: rapoo

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

#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&) ;

或者:
声明为友元时,直接就地实现,连前向声明都省了。

读书人网 >C++

热点推荐