获取模板错误。 ' T"在这方面没有申明

时间:2014-06-08 22:46:13

标签: c++ templates

我正在使用模板练习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函数的范围内声明。

请帮我解决这个问题。

2 个答案:

答案 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>