我不知道自己做错了什么,但我遇到推功能问题。你能帮帮我吗?
#include<iostream>
#include<memory>
using namespace std;
struct lista {
int value;
unique_ptr<lista>next;
lista(int value):value(value), next(nullptr){}
};
void push(int x, unique_ptr<lista> &h) {
unique_ptr<lista>alok_pam_x = make_unique<lista>(x);
if (alok_pam_x!= nullptr)
{
(alok_pam_x->next) = h;
h = alok_pam_x;
}
}
我有错误:
严重级代码描述项目文件行抑制状态 错误C2280&#39; std :: unique_ptr&gt; &amp; std :: unique_ptr&lt; _Ty,std :: default_delete&lt; _Ty&gt;&gt; :: operator =(const 的std ::的unique_ptr&LT; _Ty,性病:: default_delete&LT; _Ty&GT;&GT; &amp;)&#39;:尝试 引用删除的功能
严重性代码说明项目文件行抑制状态错误 (active)function&#34; std :: unique_ptr&lt; _Ty,_Dx&gt; :: operator =(const std :: unique_ptr&lt; _Ty,_Dx&gt; :: _ Myt&amp;)[with _Ty = lista, _Dx =标准:: default_delete]&#34; (在&#34的第1436行声明; c:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ include \ memory&#34;)不能 引用 - 它是一个已删除的函数
答案 0 :(得分:0)
您尝试在两个位置复制unique_ptr
,但unique_ptr
是仅移动类型,无法复制。您需要std::move
代替它。
此外,在调用nullptr
之后检查make_unique
是没有意义的,因为如果分配失败,它将抛出std::bad_alloc
并且永远不会达到检查。
因此,您的push
函数应如下所示
void push(int x, unique_ptr<lista> &h) {
auto alok_pam_x = make_unique<lista>(x);
alok_pam_x->next = move(h);
h = move(alok_pam_x);
}
最后,您应该考虑将push
作为lista
的成员函数。