为什么我不能在分配中将unique_ptr转换为原始指针



在编写简单的二叉搜索树插入时,我在g ++ 4.7中遇到了编译错误

error: cannot convert ‘node_ptr {aka std::unique_ptr<node>}’ to ‘node*’ in assignment

对于bst_insert函数中的行node* n = root.get()。我不明白为什么?

struct node;
typedef std::unique_ptr<node> node_ptr;
struct node {
        node(int k) : key(k) {};
        int key;
        node_ptr left = nullptr;
        node_ptr right = nullptr;
};
void bst_insert(node_ptr& root, node_ptr z) {
    node* p = nullptr;
    node* n = root.get();
    while (n != nullptr) {
        p = n;
        n = z->key < n->key ? n->left : n->right;
    }
    if (p == nullptr)
        root = std::move(z);
    else if (z->key < p->key)
        p->left = std::move(z);
    else p->right = std::move(z);
}
n = z->key < n->key ? n->left : n->right;

这一行。 n->leftn->rightstd::unique_ptr的,您正在尝试为原始指针分配唯一的 PTR。将该行更改为:

n = z->key < n->key ? n->left.get() : n->right.get();

相关内容

  • 没有找到相关文章

最新更新