2017-04-22 4 views
0
class Btree{ 
    friend void visitNode_(BtreeNode<T>* node); 
    void DFSshow(); 
    void showNode_(BtreeNode<T>* node,int step,void (*func)(BtreeNode<T>*)); 
} 
template <class T> 
void Btree<T>::DFSshow() { 
    void (*ptr)(BtreeNode<T>*); 
    ptr = &visitNode_; 
    this->showNode_(root,0,ptr); 

} 
template<class T> 
void visitNode_(BtreeNode<T> *node) { 
    node->showNode(); 
} 

멤버 함수에 friend 함수 포인터를 전달하려고합니다. 당신이 친구로 비 템플릿 함수 visitNode_ 선언 한friend 함수를 멤버 함수의 매개 변수로 사용하는 방법

errors:In file included from /Users/wangruoxuan/ClionProjects/btree/main.cpp:2: 
/Users/wangruoxuan/ClionProjects/btree/Btree.hpp:157:12: error: use of undeclared identifier 'visitNode_' 
    ptr = &visitNode_; 
     ^
1 error generated. 

답변

1
  • , 제대로 앞으로 선언 한 후 템플릿을 친구로 선언해야합니다 :
template< class T > class 
Btree; 

template< class T > void 
visitNode_(BtreeNode<T> * node); 

template< class T > class 
Btree 
{ 
    template< class T_ > friend void 
    visitNode_(BtreeNode<T_> * node); 
  • visitNode_ 실제로 함수 템플릿이며 주소를 가져올 때 템플릿 매개 변수 목록을 제공하지 않았습니다.
ptr = &visitNode_<T>; 
관련 문제