Je voudrais fournir une fonction boost :: extra à async_write. Je veux d'abord appeler la fonction HandleWrite propre aux connexions, puis appeler la fonction boost :: fournie.Boost :: lie une méthode avec boost :: function parameter
procédé Membre de connexion qui se lie à ASIO async_write
void Connection::HandleWrite( const boost::system::error_code& e, boost::function<void (const boost::system::error_code&)> handler) { // Code removed for clarity if(!handler.empty()) handler(e); };
Essayer de se lier à un HandleWrite async_write asio et fournir une autre liaison que la valeur de gestionnaire. Cela ne compile pas. Qu'est-ce que je fais mal?
void Connection::QueueRequest( boost::shared_array<char> message, std::size_t size, boost::function<void (const boost::system::error_code&)> handler) { // Code hidden for clarity boost::asio::async_write(m_Socket, boost::asio::buffer(buffer), boost::bind(&Connection::HandleWrite, shared_from_this(), boost::asio::placeholders::error, handler ) ); }
Le message d'erreur que je reçois du compilateur est la suivante:
Error 1 error C2825: 'F': must be a class or namespace when followed by '::' boost\bind\bind.hpp 69 Error 2 error C2039: 'result_type' : is not a member of '`global namespace'' boost\bind\bind.hpp 69 Error 3 error C2146: syntax error : missing ';' before identifier 'type' boost\bind\bind.hpp 69 Error 4 error C2208: 'boost::_bi::type' : no members defined using this type boost\bind\bind.hpp 69 Error 5 fatal error C1903: unable to recover from previous error(s); stopping compilation boost\bind\bind.hpp 69
Il serait utile si vous avez fourni le message d'erreur –
Je n'ai pas ajouté le message d'erreur ci-dessus. –
Le problème s'est avéré être dans un autre endroit qui utilisait la même fonction HandleWrite et n'était pas lié correctement. Après avoir réparé cela compilé. –