невозможно преобразовать из 'const boost :: asio :: const_buffers_1' в 'boost :: asio :: mutable_buffer' - PullRequest
2 голосов
/ 22 мая 2011
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_1\boost_1_46_1\boost\asio\detail\buffer_sequence_adapter.hpp  211

1 Ответ

3 голосов
/ 22 мая 2011

Функция async_receive должна изменять содержимое буфера, но вы не можете изменить постоянный буфер.

Используйте mutable_buffer вместо постоянного буфера.Вы можете найти некоторую информацию здесь

Вам нужно передать указатель и размер в изменяемый буфер:

std::vector<char> content_buffer(max_buffer_size);

... boost::asio::mutable_buffer(content.data(), content.size()) ...

Важно, чтобы вы объявили свой content_bufferв глобальной области, потому что функция async_receive обращается к асинхронному буферу.Если вы объявите свой буфер в функции, он выйдет из области видимости до получения данных.

...