2010-06-09 23 views
3

Man ... pensée en utilisant ASIO dans Boost allait être facile et intuitive. : PBoost ASIO async_accept compilation échoue

Je commence à l'avoir finalement mais j'ai quelques problèmes. Voici un extrait. J'ai plusieurs erreurs de compilation sur la ligne async_accept. Qu'est-ce que je fais mal? : P

J'ai basé mon code hors de cette page: http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/tutorial/tutdaytime3/src.html

Erreurs:

erreur 1 erreur C2780: « vide boost :: asio :: :: basic_socket_acceptor async_accept (boost :: asio :: basic_socket &, boost :: asio :: :: ip basic_endpoint &, AcceptHandler) »: 3 prévoit arguments - 2 fourni e: \ schoolcode \ principal projet \ cplusplusport \ cplusplusport \ alexsocket.cpp 36

Erreur 2 Erreur C2784: 'vide boost :: asio :: :: basic_socket_acceptor async_accept (boost :: asio :: basic_socket &, AcceptHandler)': ne pouvait pas déduire argument modèle pour 'boost :: asio :: basic_socket &' de 'boost :: asio :: :: ip tcp :: socket *' e: \ schoolcode \ principal projet \ 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) 
{ 

} 
+0

Donnez-nous plus d'informations. Vous vous liez à 'AlexSocket :: NewConnection' avec' this' comme premier argument - mais pour autant que je puisse voir, 'this' n'est pas un' AlexSocket' - n'est-ce pas? Et la méthode NewConnection est-elle virtuelle? – Thanatos

+0

pouah. J'essayais de me débarrasser de mon pseudo préfixe "MyName" que j'ajoute à toutes mes classes lorsque j'écris du code d'apprentissage. : P – bobber205

+0

La méthode est * non * virtuelle. – bobber205

Répondre

3

async_accept attend une référence à la socket, pas un pointeur, alors essayez

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

omg Je suis tellement bête! Je vous remercie!!! :RÉ – bobber205