非常量左值引用类型' int'无法绑定到临时类型' int'

时间:2015-06-30 05:00:15

标签: c++ binary-search-tree

这是我对二叉树的节点实现。

template<typename T> class node{
    public:
        explicit node():data(0), left(NULL), right(NULL){}
        explicit node(const T& data):data(data),left(NULL), right(NULL){}

        template<typename E> friend class bst;

    private:
        T& data;
        node<T>* left;
        node<T>* right;
};

这是二叉搜索树。

template<typename T> class bst{
    public:
        bst():root(NULL){}
        bst(node<T>* root):root(root){}
private:
        node<T>* root;
};

调用类做了类似的事情。

int main(){

    node<int>* root = new node<int>(17);
    bst<int>* t = new bst<int>(root);


    t->insert(root,21);
    t->insert(root,12);
    t->insert(root, 9);

    delete t;
}

我一直收到错误。

./node.hpp:3:19: error: non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'
                explicit node():data(0), left(NULL), right(NULL){}

有人可以帮我理解,问题到底是什么。

1 个答案:

答案 0 :(得分:1)

T& data;

有你的问题。那应该是T。没有理由把它作为参考。在您的默认构造函数中,您尝试为其分配一个临时值(文字0),并且由于它是引用类型,因此您无法为其提供临时值。

文字0对于其默认值仍然是一个糟糕的选择,考虑到0是一个int,并且您的类型旨在适用于所有类型。您应该考虑使用更多的多态值,例如T(),或者在注释或文档中明确声明类型必须可以从int转换。