【发布时间】:2019-10-31 05:51:12
【问题描述】:
我在想这会很直接,但我一定错过了一些关键的东西,因此错误 =O。 我在源文件中收到“使用已删除函数”错误。
无论如何,我知道我的头文件已正确连接,因为它已在整个源文件中正确调用,除了这一行之外,源代码 sn-p 是唯一需要评估的地方。
标头源代码
using boost::asio::ip::tcp;
tcp::acceptor mAcceptor;
std::map<std::string, tcp::socket> mSockets;
源文件代码
tcp::socket socket(ioService);
mAcceptor.accept(socket);
std::string myKey = "Socket"; // Didn't add actual key string creation
mSockets[myKey] = socket;
错误
错误:使用删除函数'boost::asio::basic_stream_socket& boost::asio::basic_stream_socket::operator{const boost::asio::basic_stream_socket&)' mSockets[myKey] = 套接字;
接着说: 隐式声明为已删除,因为 'boost::asio::basic_stream_socket' 声明了移动构造函数或移动赋值运算符类 basic_stream_socket。
更新
@Radosław Cybulski 建议尝试 std::move(socket) ,这消除了很大一部分错误,但现在导致了。
错误 #2
'boost::asio::basic_stream_socket::basic_stream_socket()' 秒(std::forward<_args2>(std::get<_indexes2>(_tuple2))...)
【问题讨论】:
-
不要在已回答的问题中添加更多问题。创建一个新问题。
-
这很奇怪。我无法想象单个对象直接管理多个套接字的代码。在我的代码中,单个套接字由处理套接字逻辑的某个类包装,并且只有该对象由其他东西聚合。