C++ 具有std::unique\u ptr的二叉树

C++ 具有std::unique\u ptr的二叉树,c++,c++11,C++,C++11,实际上,我正在使用std::unique_ptr来创建一个二叉树 事实上,我使用了一个算法tour,它从距离矩阵计算最短路径! 在我的算法中,我发现自己面临着std::move()和std::unique\u ptr的问题 我的树是构建的,但只在根节点上,不“生成分支” 下面是我遇到问题的代码: node = std::move(node.get()->addChild()); 函数addChild返回新子项(=std::unique_ptr)的引用 我真的需要“更改”节点以完成我的算法

实际上,我正在使用
std::unique_ptr
来创建一个二叉树

事实上,我使用了一个算法tour,它从距离矩阵计算最短路径! 在我的算法中,我发现自己面临着
std::move()
std::unique\u ptr
的问题

我的树是构建的,但只在根节点上,不“生成分支”

下面是我遇到问题的代码:

node = std::move(node.get()->addChild());
函数
addChild
返回
新子项(=std::unique_ptr)
的引用


我真的需要“更改”节点以完成我的算法。那么,我该如何修复它呢

更改
addChild
以按值返回新节点的
unique\u ptr
,而不是返回引用。结果将是一个右值,而不需要使用
std::move
进行强制转换。在当前代码中,您将一个左值引用传递给
std::move
,这导致它仍然是一个左值引用,并试图调用复制构造函数而不是
std::unique\u ptr

的move构造函数。到底是什么问题?是否要将
节点
设置为
子节点
?然后你的
node=std::unique\u ptr(std::move(node.get()->addChild())
。你不能修复
addChild
并让它返回一个
unique\u ptr
?然后您甚至不需要调用
std::move
,只需要
node=node.get()->addChild()是,因为我的算法会一直旋转,直到孩子有一个2x2矩阵!因此,该算法在这些节点上工作,但除此之外,还创建了一棵树,每个节点都有一些信息要保存!在我的算法结束时,我应该能够运行我的树!尝试了你的解决方案,但无效。无论如何谢谢你!addChild的返回是
unique_ptr
但是
node=node.get()->addChild()不起作用。这里是您的解决方案的错误:
little.cpp:66:18:错误:使用删除的函数'std::unique\u ptr&std::unique\u ptr::operator=(const std::unique\u ptr&)[with _Tp=Node;_Dp=std::default\u delete]'Node=Node.get()->addChild()