在编写简单的二叉搜索树插入时,我在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->left
和n->right
是std::unique_ptr
的,您正在尝试为原始指针分配唯一的 PTR。将该行更改为:
n = z->key < n->key ? n->left.get() : n->right.get();