Gar*_*ary 0 c++ smart-pointers c++11
在编写简单的二叉搜索树插入时,在g++ 4.7中遇到编译错误
\n\nerror: cannot convert \xe2\x80\x98node_ptr {aka std::unique_ptr<node>}\xe2\x80\x99 to \xe2\x80\x98node*\xe2\x80\x99 in assignment\nRun Code Online (Sandbox Code Playgroud)\n\n对于函数node* n = root.get()中的行bst_insert。我不明白为什么?
struct node;\n\ntypedef std::unique_ptr<node> node_ptr;\n\nstruct node {\n node(int k) : key(k) {};\n int key;\n node_ptr left = nullptr;\n node_ptr right = nullptr;\n};\n\nvoid bst_insert(node_ptr& root, node_ptr z) {\n node* p = nullptr;\n node* n = root.get();\n while (n != nullptr) {\n p = n;\n n = z->key < n->key ? n->left : n->right;\n }\n if (p == nullptr)\n root = std::move(z);\n else if (z->key < p->key)\n p->left = std::move(z);\n else p->right = std::move(z);\n}\nRun Code Online (Sandbox Code Playgroud)\n
n = z->key < n->key ? n->left : n->right;
Run Code Online (Sandbox Code Playgroud)
这条线。n->left并且n->right是std::unique_ptrs 并且您正在尝试将唯一的 ptr 分配给原始指针。将该行更改为:
n = z->key < n->key ? n->left.get() : n->right.get();
Run Code Online (Sandbox Code Playgroud)