构造函数导致"use of deleted function"错误



我正在尝试通过调用自定义构造函数来初始化结构内部的变量

这适用于使用 boost asio 与服务器通信的 https 项目。基本上我想用带有参数的结构初始化 IO 上下文。当我添加... : stream(ioc,ctx)时,该错误特别发生

这是我的结构

struct HTTPSQueryStruct
{
ssl::stream<tcp::socket> stream;
HTTPSQueryStruct(boost::asio::io_context& ioc, ssl::context& ctx) : stream(ioc,ctx)
{
}
};

这就是我所说的

boost::asio::io_context ioc;
ssl::context ctx{ssl::context::sslv23_client};
ctx.set_verify_mode(ssl::verify_peer); /* Set to verify host's ssl */
ctx.set_default_verify_paths();        /* Load CA certificates */
HTTPSQueryStruct query = HTTPSQueryStruct(ioc, ctx);

这是我收到的错误

error: use of deleted function ‘HttpsCom::HTTPSQueryStruct::HTTPSQueryStruct(HttpsCom::HTTPSQueryStruct&&)’
HTTPSQueryStruct query = HTTPSQueryStruct(ioc, ctx);
note: ‘HttpsCom::HTTPSQueryStruct::HTTPSQueryStruct(HttpsCom::HTTPSQueryStruct&&)’ is implicitly deleted because the default definition would be ill-formed:
struct HTTPSQueryStruct
error: use of deleted function ‘boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp> >::stream(const boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp> >&)’
In file included from class/HttpsCom.h:10:0,
from class/HttpsCom.cpp:1:
/usr/local/include/boost/asio/ssl/stream.hpp:64:7: note: ‘boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp> >::stream(const boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp> >&)’ is implicitly deleted because the default definition would be ill-formed:

原因是无法复制ssl::stream<tcp::socket>,而您有一个成员。
(它不能被复制是巨大的use of deleted function ‘boost::asio::ssl::stream<...行试图表达的,用可能的话来说也是如此。

直接初始化而不是复制

HTTPSQueryStruct query(ioc, ctx);

您还可以添加一个移动构造函数(以后可能需要一个(

HTTPSQueryStruct(HTTPSQueryStruct&& other) 
: stream(std::move(other.stream))
{
}

但是复制初始化只会增加噪音,我会坚持直接初始化。

最新更新