c++ 错误:使用已删除的函数 boost::asio::io_context::io_context

Posted

技术标签:

【中文标题】c++ 错误:使用已删除的函数 boost::asio::io_context::io_context【英文标题】:c++ error: use of deleted function boost::asio::io_context::io_context 【发布时间】:2018-04-29 20:58:06 【问题描述】:

尝试实例化类的新对象时出现此错误。代码是:

using boost::asio::ip::tcp;
typedef boost::asio::io_service ioservice;

class cnx

public:
    cnx(ioservice io);

private:
    tcp::socket *s;
;

//constructor:
cnx::cnx(ioservice io)

    this->s = new tcp::socket(io);

在cnx的cpp/h文件之外,我尝试实例化为:

ioservice io;
cnx c(io);

cnx* c = new cnx(io);

两者都会导致此错误消息。这可能是什么原因造成的?

【问题讨论】:

boost::asio::io_service 不可复制。 【参考方案1】:

正如@tkausl 在 cmets 中所说,也感谢this 的回答,问题是因为boost::asio::io_service 不可复制。将构造函数的定义改为:

cnx(ioservice& io);

并通过以下方式调用它:

ioservice io;
cnx c(std::ref(io));

解决了问题

【讨论】:

以上是关于c++ 错误:使用已删除的函数 boost::asio::io_context::io_context的主要内容,如果未能解决你的问题,请参考以下文章

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

c++ 错误:使用已删除的函数 boost::asio::io_context::io_context

VS2019 C++ 错误 C2280 试图引用已删除的函数 inl

Visual Studio 2013 和 2015 中的 C++ 编译器错误 C2280“试图引用已删除的函数”

C++错误C2280 - 试图引用一个已删除的函数 - 在基元类型上。

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