Comment utiliser std :: string avec asio :: buffer ()
Je reçois le message d'erreur suivant lorsque j'essaie d'utiliser std::string avec boost::asio::tampon:
boost/asio/detail/consuming_buffers.hpp:
Dans le constructeur
'boost::asio::detail::consuming_buffers<
boost::asio::mutable_buffer, boost::asio::const_buffers_1::consuming_buffers(const boost::asio::const_buffers_1 &)':
boost/asio/impl/lire.hpp:140:25:
instanciés à partir de
'boost::asio::detail::read_op<
boost::asio::basic_stream_socket,
boost::asio::const_buffers_1
boost::asio::detail::transfer_all_t
boost::_bi::bind_t<
vide, boost::_mfi::mf1
boost::_bi::liste 2, boost::arg<1> (*)()>::read_op(
boost::asio::basic_stream_socket
&, const boost::asio::const_buffers_1
&
boost::asio::detail::transfer_all_t
boost::_bi::bind_t<
vide, boost::_mfi::mf1
boost::_bi::liste 2, boost::arg<1> (*)()>)' .... .......
l'intégralité du code source: http://liveworkspace.org/code/eca749f6f2714b7c3c4df9f26a404d86
source d'informationauteur niXman
Vous devez vous connecter pour publier un commentaire.
Je pense que le problème, c'est que vous êtes de passage à un const tampon à
async_read
au lieu d'une mutable tampon. À la fin du bloc dans la ligne 50,boost::asio::buffer(_header)
retourne un const tampon. Vous devriez faire quelque chose commeboost::asio::async_read(s, boost::asio::buffer(data, size), handler)
parce queboost::asio::buffer(data, size)
crée une mutable tampon.Au lieu d'utiliser
std::string
s pour _header et _data, vous avez probablement besoin d'utiliser des tableaux de char, tels que:Voir les références de la mémoire tampon et async_read.
Vous devez passer un pointeur en tant que premier paramètre:
http://www.boost.org/doc/libs/1_50_0/doc/html/boost_asio/reference/buffer.html
Il semble que std::string ne pouvait être passé dans une asio::tampon comme une référence const.
std::vector devrait être une meilleure alternative: