template_abn

时间:2017-12-01 20:44:31

标签: c++ c++11 templates struct unique-ptr

我有一个带有结构节点的二叉搜索树模板类。我试图在我的树中使用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,并且不需要再次执行。它现在似乎正常运作。

0 个答案:

没有答案