无法从"const boost::asio:::const_buffers_1"转换为"boost::asio::mutable_buffer"

cannot convert from 'const boost::asio::const_buffers_1' to 'boost::asio::mutable_buffer'

本文关键字:boost asio const mutable buffer 转换 buffers      更新时间:2023-10-16
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函数正在异步访问缓冲区。如果在函数中声明缓冲区,那么在接收数据之前,缓冲区就超出了作用域。