Boost Asio - boost :: bind вызывает сбой программы - PullRequest
0 голосов
/ 08 апреля 2019

У меня проблема при попытке скомпилировать мою программу с boost::bind в качестве параметра для вызова функции async_read_some.

Если я использую этот код ниже, моя программа будет аварийно завершать работу при достижении async_read_some.

socket_.async_read_some(boost::asio::buffer(message_, 1024),
            boost::bind(
                &Session::print_message, self, 
                boost::asio::placeholders::error, 
                boost::asio::placeholders::bytes_transferred)
        );


void print_message(boost::system::error_code& ec, std::size_t length)
{
}

Но если я удаляю boost::bind и заменяю его лямбда-функцией, все будет работать нормально.

    socket_.async_read_some(boost::asio::buffer(message_, 1024),
        [this, self](boost::system::error_code& ec, std::size_t length)
        {
            if (!ec)
            {
                std::cout << "made it" << std::endl;
            }

            std::cout << "Error: " << ec.message() << std::endl;
        }

Это ошибка, которую я получаю при компиляции

'R boost::_mfi::mf2<R,Session,boost::system::error_code &,size_t>::operator ()(T *,A1,A2) const': cannot convert argument 2 from 'Arg1' to 'A1' 

Если вам понадобится больше кода, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 09 апреля 2019

Как указывало @ rafix07, программа вызывала сбой, потому что я не ввел правильные аргументы для моего обработчика print_message.

Необходимо переключить:

void print_message(boost::system::error_code& ec, std::size_t length)

до

void print_message(const boost::system::error_code& ec, std::size_t length)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...