首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-04-01 
类摸板中友元函数在调用是编译通不过templateclassTclassDNode{private:TdataDNode*left,*rightpublic

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

//...


};

热点排行