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

类摸板中友元函数在调用时编译通不过,该如何解决

2012-02-29 
类摸板中友元函数在调用时编译通不过#includeiostream#includestring.husingnamespacestdtemplatecl

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

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

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

热点排行