c++ - 构造函数导致“使用已删除函数”错误
问题描述
我正在尝试通过调用自定义构造函数来初始化结构内部的变量
这适用于使用 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:
解决方案
原因是 assl::stream<tcp::socket>
不能被复制,而你有一个成员。
(它不能被复制是巨大的use of deleted function ‘boost::asio::ssl::stream<...
线试图说的,用太多的话来说。)
直接初始化而不是复制
HTTPSQueryStruct query(ioc, ctx);
您还可以添加一个移动构造函数(以后可能需要一个)
HTTPSQueryStruct(HTTPSQueryStruct&& other)
: stream(std::move(other.stream))
{
}
但是复制初始化只会增加噪音,我会坚持直接初始化。
推荐阅读
- android - 如何解决共享按钮 Android Studio 错误
- java - 为什么 java.util.Stack 不使用 LinkedList 的复合模式,而不是 Vektor?
- graph - GraphX 从 csv 创建边和顶点
- django - 加载 pylint_django 时 pylint 无法正常工作
- javascript - 如何使用 Javascript 创建数学测验
- javascript - 在javascript中过滤带有按钮值的表
- javascript - 如何使用javascript同时触发输入键和按钮
- c# - 替换静态类以打包方法和变量
- c# - NetTopologySuite Distance 在 .net Core 3 中返回奇怪的结果
- google-apps-script - GoogleSheets - 有没有办法将用户信息从“显示编辑历史”提取到单元格?