这是我对二叉树的节点实现。
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){}
有人可以帮我理解,问题到底是什么。
答案 0 :(得分:1)
T& data;
有你的问题。那应该是T
。没有理由把它作为参考。在您的默认构造函数中,您尝试为其分配一个临时值(文字0
),并且由于它是引用类型,因此您无法为其提供临时值。
文字0
对于其默认值仍然是一个糟糕的选择,考虑到0
是一个int,并且您的类型旨在适用于所有类型。您应该考虑使用更多的多态值,例如T()
,或者在注释或文档中明确声明类型必须可以从int转换。