在二叉树编程中,出现缺少“;”的问题

#include
using namespace std;
template
class BinaryTree;//出现error C2143: syntax error : missing ';' before '<'
template
class BinaryTreeNode
{
friend class BinaryTree;
private:
T element;
BinaryTreeNodeleft,*right;
public:
BinaryTreeNode(); //缺省构造函数
BinaryTreeNode(const T& ele);//给定数据构造函数
BinaryTreeNode(const T& ele, BinaryTreeNode
l, BinaryTreeNode* r);
T value() const;//返回当前结点的数据
//返回当前结点指向左子树
BinaryTreeNode* leftchild() const;
//返回当前结点指向右子树
BinaryTreeNode* rightchild() const;

//设置当前结点的左子树
void setLeftchild(BinaryTreeNode) ;
//设置当前结点的右子树
void setRightchild(BinaryTreeNode
) ;
//设置当前结点的数据域
void setValue(const T& val);
bool isLeaf() const; //重载赋值操作符
BinaryTreeNode& operator= (const BinaryTreeNode& Node)
{
this=Node;
};
};
template
class BinaryTree
{
private:
//二叉树根结点指针
BinaryTreeNode* root;
//从二叉树的root结点开始查找current结点的父结点
BinaryTreeNode GetParent (BinaryTreeNode* root, BinaryTreeNode* current);

public:

BinaryTree(){root=NULL}; //构造函数
~BinaryTree() {DeleteBinaryTree(root);};//析构函数
//前序周游二叉树或其子树
void PreOrder(BinaryTreeNode* root);
//中序周游二叉树或其子树
void InOrder(BinaryTreeNode* root);
//后序周游二叉树或其子树
void PostOrder(BinaryTreeNode* root);
//按层次周游二叉树或其子树
void BLevelOrder (BinaryTreeNode *root);
void CreateTree (BinaryTreeNode *t) ;
};

void CreateTree (BinaryTreeNode *t) ;
这一行的分号是全角的。