错误:使用已删除的函数‘std::unique_ptr<...> [关闭]

Posted

技术标签:

【中文标题】错误:使用已删除的函数‘std::unique_ptr<...> [关闭]【英文标题】:error: use of deleted function ‘std::unique_ptr<...> [closed] 【发布时间】:2020-05-12 20:37:04 【问题描述】:

我是 C++ 编程新手。我试图使用一个外部库,我可以在其中访问头文件和 .so 库。

这是我的图书馆代码

class Employee 
private:
      std::unique_ptr<Address> address;
      ................
      ................
      ................
public:
     virtual void updateAddressCity(cont string& city) address.updateCity(city); 

我试图在我的类构造函数中初始化这个员工变量,我遇到了这个错误

错误:使用已删除的函数‘std::unique_ptr<...>

EmployeeInfo.h

class EmployeeInfo
private:
Employee mEmployee;

public:
Employee getEmployee();

EmployeeInfo.cpp

EmployeeInfo::EmployeeInfo(Employee &employee) : mEmployee(employee) 


【问题讨论】:

您应该得到address.updateCity(city) 的错误,因为address 是指向对象的指针,而不是对象实例本身。请尝试创建一个minimal reproducible example,它会复制您询问的错误并且不包含其他不相关的错误。另外请将fullcomplete错误输出复制粘贴到问题中,并在错误所在的代码中添加注释。 至于你问的错误,想想getEmployee真正返回的是什么......它返回了Employee对象的副本,因为@987654329 @ 包含 std::unique_ptr 成员,无法复制。 std::unique_ptr&lt;Address&gt; 没有名为 updateCity 的函数。您可以使用-&gt; 而不是.,我认为这不是给出给定错误的代码。 【参考方案1】:

找到解决方案感谢您花时间回答我的问题

解决方案 标记 Employee mEmployee;作为参考

Employee&amp; mEmployee;

【讨论】:

以上是关于错误:使用已删除的函数‘std::unique_ptr<...> [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

学习c++:错误:使用已删除函数

在 qt C++ 信号和槽中使用已删除函数错误

C++ 错误(C2280)试图访问已删除的函数 [关闭]

std::atomic_int 出现“使用已删除函数”错误

错误:使用已删除的函数 boost::filesystem3::directory_iterator

调用递归函数时出现编译器错误 - “试图引用已删除的函数”