2014-11-14 47 views
0

模板声明:模板和BST

template <typename DataType> 
class BST  

而且我不断收到错误 bst.h(101):见参考文献类模板实例 'BST :: BinNode' 正在编制 BST .h(183):请参阅参考正在编译的类模板实例化'BST'

我认为我的语法可能是错误的,但我不确定它是什么。有人能把我推向正确的方向吗?我无法让它编译。 BinNode类是主类BST的私有类。错误是指太行是数据类型BinNode :: treeheight(BinNode * P)

private: 
/***** Node class *****/ 
class BinNode 
{ 
public: 

DataType data; 
BinNode * left; 
BinNode * right; 
DataType treeheight(BinNode * p); 

template <typename DataType> 
DataType BinNode::treeheight(BinNode * p) 
{ 
    if(p != 0) 
    { 
     int heightl = treeheight(p->left); 
     int heightr = treeheight(p->right); 
    } 

    if(heightl > heightr) 
     return heightl; 

    else 
     return height r; 
} 
+0

'BinNode'不是一个模板,但是你定义了它的成员函数,就好像它被声明为模板一样。而且,一个合格的成员函数定义('BinNode :: treeheight(...){...}')不会进入类体内部,因为它看起来像你在这里完成的。放在课堂外面。 – 0x499602D2 2014-11-14 23:11:06

+0

“Node”类是模板吗?如果是这样,当定义成员函数(在类之外)时,您需要将成员函数定义限定为节点 :: BinNode :: treeheight(...){...},因为'BinNode'是一个嵌套类'Node'。 – 0x499602D2 2014-11-14 23:12:32

+0

我认为这是因为它使用DataType作为数据变量,但这是唯一的指示器,它是模板的一部分 – bigdog225 2014-11-14 23:18:42

回答

0

当定义的成员函数(类外,即是),你需要有资格的成员函数定义Node<DataType>::BinNode::treeheight(…) {…}BinNode是嵌套类Node