《数据结构,算法与应用》二叉树一章中的问题

书中构建了一个linkedBinaryTree类,其中定义了一个访问函数:

static void(*visit)(binaryTreeNode<E>*)

作为一个静态成员需要在类外定义
为什么

template<class E>
void (*linkedBinaryTree<E>::visit)(linkedBinaryTreeNode<E>*) = NULL;
/*
template<class E>
void (linkedBinaryTree<E>::*visit)(linkedBinaryTreeNode<E>*) = NULL;
*/

上面的代码可行,而下面注释掉的代码不可以

visit是函数指针,类域名本来就是修饰变量的
类比一下:
class A
{
public:
static char *p;
};
char * A::p;