我有一个带有结构节点的二叉搜索树模板类。我试图在我的树中使用Node类型的unique_ptrs,但我无法初始化
这是我的结构
template <class T>
struct Node{
T data;
unique_ptr<Node<T>> left;
unique_ptr<Node<T>> right;
unique_ptr<Node<T>> parent;
Node();
Node(const T &
value):data(value),left(nullptr),right(nullptr),parent(nullptr){}
};
在我的二进制搜索树类定义中,我有
private:
unique_ptr<Node<T>> root;
然后在bst的一个函数中我有
Node<T>* temp(new Node<T>(data)); //works
root(new Node<T>(data)); //does not compile
打印出错误消息:
error: no match for call to ‘(std::unique_ptr<Node<std::__cxx11::basic_string<char> >, std::default_delete<Node<std::__cxx11::basic_string<char> > > >) (Node<std::__cxx11::basic_string<char> >*)’
root(new Node<T>(data));
^
为什么会这样?任何关于使用unique_ptr的解释/提示都将不胜感激。
注意:我在头文件顶部包含并使用了命名空间std
编辑: 我已将其更改为shared_ptr,因为unique_ptr不能同时指向父级。
我现在正在使用
root.reset(new Node<T>());
因为有人指出我已经构建了root,并且不需要再次执行。它现在似乎正常运作。