友元函数不是可以访问私成事员吗

友元函数不是可以访问私有成员吗?
代码是照书上扒下来的,没写完,没有建树的部分。
可是vc编译器编译过不了,提示无法访问私有成员,这不合理啊。下面有标记,换了codeblocks的编译器以及g++也是相同的错误。求解惑,我是新手,请多多包涵。

/*tree.h*/
class BinaryTreeNode{
    friend void Visit(BinaryTreeNode<T>*);
friend void InOrder(BinaryTreeNode<T>*);
friend void PreOrder(BinaryTreeNode<T>*);
friend void InOrder(BinaryTreeNode<T>*);
friend void PostOrder(BinaryTreeNode<T>*);
//friend void main(void);
public:
BinaryTreeNode(){LeftChild=RightChild=0;}
BinaryTreeNode(const T& e)
{data=e;
LeftChild=RightChild=0;}
BinaryTreeNode(const T& e,BinaryTreeNode*l,BinaryTreeNode*r)
{data=e;
LeftChild=l;
RightChild=r;}
//void Visit(BinaryTreeNode<T>*);
//void PreOrder(BinaryTreeNode<T>*);
private:
T data;
BinaryTreeNode<T> *LeftChild,*RightChild;
};[code=c]
[code=c]
/*tree.cpp*/
#include <iostream>
#include "tree.h"
template <class T>
void Visit(BinaryTreeNode<T>* t)
{
std::cout<<t->data;
}
template <class T>
void PreOrder(BinaryTreeNode<T>* t)
{
if(t)
{
Visit(t);
std::cout<<t->data;//编译器在这里提示访问不了私有成员
PreOrder(t->LeftChild);//这里也是
PreOrder(t->LeftChild);//这里也是
}
}

void main(void)
{
BinaryTreeNode<int>* t=new BinaryTreeNode<int>();
PreOrder<int>(t);
}

C VC

------解决方案--------------------
你的class BinaryTreeNode是模版类吧。那应该有template <class T>啊
template <class T>
class BinaryTreeNode{
    friend void Visit(BinaryTreeNode<T>*);
    friend void InOrder(BinaryTreeNode<T>*);
    friend void PreOrder(BinaryTreeNode<T>*);
    friend void InOrder(BinaryTreeNode<T>*);
    friend void PostOrder(BinaryTreeNode<T>*);
    //friend void main(void);
public:
    BinaryTreeNode(){LeftChild=RightChild=0;}
    BinaryTreeNode(const T& e)
    {data=e;
    LeftChild=RightChild=0;}
    BinaryTreeNode(const T& e,BinaryTreeNode*l,BinaryTreeNode*r)
    {data=e;
    LeftChild=l;
    RightChild=r;}
    //void Visit(BinaryTreeNode<T>*);
    //void PreOrder(BinaryTreeNode<T>*);
private:
    T data;
    BinaryTreeNode<T> *LeftChild,*RightChild;
};
------解决方案--------------------
引用:
你的class BinaryTreeNode是模版类吧。那应该有template <class T>啊
template <class T>
class BinaryTreeNode{
    friend void Visit(BinaryTreeNode<T>*);
    friend void InOrder(BinaryTreeNode<T>*);
 ……

 agree +1
------解决方案--------------------