我正在尝试通过调用自定义构造函数来初始化结构内部的变量
这适用于使用 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))
{
}
但是复制初始化只会增加噪音,我会坚持直接初始化。