无法从"const boost::asio:::const_buffers_1"转换为"boost::asio::mutable_buffer"
cannot convert from 'const boost::asio::const_buffers_1' to 'boost::asio::mutable_buffer'
bool Connection::Receive(){
boost::shared_ptr<std::string> buffer(new std::string());
socket_.async_receive(boost::asio::buffer(*buffer), boost::bind(&Connection::handler, this,
boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
//std::cout<<buffer<<std::endl;
int recvlen = buffer->length();
if (recvlen <= 0) {
return false;
}
//this->OnReceived(buffer, recvlen);
return true;
}
错误:
Error 1 error C2440: '<function-style-cast>' : cannot convert from 'const boost::asio::const_buffers_1' to 'boost::asio::mutable_buffer' e:boost_1_46_1boost_1_46_1boostasiodetailbuffer_sequence_adapter.hpp 211
async_receive
函数需要更改缓冲区的内容,但不能更改常量缓冲区。
使用mutable_buffer
而不是常量缓冲区。你可以在这里找到一些信息
您需要将指针和大小传递给可变缓冲区:
std::vector<char> content_buffer(max_buffer_size);
... boost::asio::mutable_buffer(content.data(), content.size()) ...
在全局范围内声明content_buffer
非常重要,因为async_receive
函数正在异步访问缓冲区。如果在函数中声明缓冲区,那么在接收数据之前,缓冲区就超出了作用域。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 从 Boost ASIO 获取 epoll 描述符 io_service对象
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- 执行时使用 boost::asio::d eadline_timer 时出错
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- boost::asio data owning `ConstBufferSequence`
- 如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?
- 如何将boost::asio::d eadline_timer 与Qt一起使用?
- 将更高的优先级设置为 boost::asio 线程处理进程
- Async_read_until限制读取的字节大小(Boost::asio)
- 程序崩溃使用boost::asio
- boost::asio 无法捕获 SIGINT
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- 如何在 boost::asio 中将打包的结构作为消息传递?(无序列化)
- 如何使用C++和Boost Asio从HTTP发布请求中获取键值
- std::boost::asio::p ost / dispatch 使用哪个io_context?