Сбой при компиляции ASIO async_accept - PullRequest
3 голосов
/ 09 июня 2010

Человек ... думал, что использовать ASIO в Boost будет легко и интуитивно понятно.: P

Я наконец-то понял, но у меня возникли проблемы.Вот фрагмент.У меня есть несколько ошибок компилятора в строке async_accept.Что я делаю неправильно?: P

Я основал свой код на этой странице: http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/tutorial/tutdaytime3/src.html

Ошибки:

Ошибка 1 Ошибка C2780: 'void boost :: asio:: basic_socket_acceptor :: async_accept (boost :: asio :: basic_socket &, boost :: asio :: ip :: basic_endpoint &, AcceptHandler) ': ожидает 3 аргумента - 2 при условии e: \ schoolcode \ senior project \ cplusplusport \ cplusplusport \alexsocket.cpp 36

Ошибка 2 ошибка C2784: «void boost :: asio :: basic_socket_acceptor :: async_accept (boost :: asio :: basic_socket &, AcceptHandler)»: не удалось вывести аргумент шаблона для «boost:: asio :: basic_socket & 'from' boost :: asio :: ip :: tcp :: socket * 'e: \ schoolcode \ senior project \ cplusplusport \ cplusplusport \ alexsocket.cpp 36

bool TestSocket::StartListening(int port)
{
    bool didStart = false;

    if (!this->listening)
    {
        //try to listen
        acceptor = new tcp::acceptor(this->myService, tcp::endpoint(tcp::v4(), port));
        didStart = true; //probably change?
        tcp::socket* tempNewSocket = new tcp::socket(this->myService);
        acceptor->async_accept(tempNewSocket, boost::bind(&TestSocket::NewConnection, this, tempNewSocket, boost::asio::placeholders::error) );
    }
    else //already started!
        return false;

    this->listening = didStart;
    return didStart;
}

void TestSocket::NewConnection(tcp::socket* s, const boost::system::error_code& error)
{

}

1 Ответ

3 голосов
/ 09 июня 2010

async_accept ожидает ссылку на сокет, а не указатель, поэтому попробуйте

acceptor->async_accept(*tempNewSocket, ...
...