我正在使用模板练习bst程序。以下是该计划。
template<class T>
class bstnode
{
public:
T key;
bstnode *left, *right;
bstnode()
{
left=right=0;
}
bstnode(const T& el, bstnode *l=0, bstnode *r=0)
{
key=el;
left=l;
right=r;
}
};
template<class T>
class bst
{
protected:
bstnode<T>* root;
public:
bst()
{
root=0;
}
void insert(T);
void display();
void inorder(bstnode<T> *);
};
void inorder(bstnode <T>* b1) //ERROR 'T' was not declared in scope
{
if(b1)
{
cout<<b1->key;
}
else
{
return;
}
inorder(b1->right);
inorder(b1->left);
}
template<class T>
void bst<T>::display()
{
//bstnode<T> * b=new bstnode<T>();
//b=root;
inorder(root);
}
template<class T>
void bst<T>::insert(T v)
{
bstnode<T>* b=new bstnode<T>();
b->key=v;
if(root==NULL)
{
root=b;
}
else
{
bstnode<T>* temp=root;
while((temp->left!=NULL)||(temp->right!=NULL))
{
if(temp->key > b->key)
{
temp=temp->right;
}
else
{
temp=temp->left;
}
}
if(temp->key < b->key)
{
temp->left=b;
}
else
{
temp->right=b;
}
}
}
int main(int argc, char *argv[])
{
bst<int>b;
b.insert(10);
b.insert(5);
b.insert(2);
return 0;
}
在编译期间,我收到错误'T'未在inorder函数的范围内声明。
请帮我解决这个问题。
答案 0 :(得分:2)
你必须写
template <typename T>
void bst<T>::inorder(bstnode <T>* b1)
{
if(b1) cout<<b1->key;
else return;
inorder(b1->right);
inorder(b1->left);
}
答案 1 :(得分:0)
由于你的函数inorder在类体之外,你需要添加另一个模板,该模板在类之外被引用
template<class T>