Bonjour à tous !

Je doit créer un IRC à l'aide de boost. Je suis sur ubuntu et je travail actuellement sur la partie serveur. J'ai une classe "Client" (qui s'apparente à la classe tcp_connection du tuto boost:asio de dev.com) et j'ai une erreur au niveau de la compilation (enfin je pense) que je n'arrive pas à comprendre et donc a corriger.

voici le code :

Client.hpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
#ifndef _CLIENT_
#define _CLIENT_
 
#include <iostream>
#include <boost/bind.hpp>
#include <boost/asio.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <list>
 
#include "Channel.hpp"
 
using boost::asio::ip::tcp;
 
typedef boost::shared_ptr<Client> pointer;
 
class Channel;
 
class Client : public boost::enable_shared_from_this<Client>
{
public:
 
	Client(boost::asio::io_service& io_service);
 
	static pointer create(boost::asio::io_service& ioservice);
	tcp::socket& socket(); 
	void envoyer(std::string message);
	void handle_read(const boost::system::error_code& error);
	void start();
 
private:
 
	std::string nom;
	std::list<Channel> listeChannel;
 
	tcp::socket socket_;
	std::string message_;
 
};
 
#endif
Client.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "Client.hpp"
 
 
	Client::Client(boost::asio::io_service& io_service)
		: socket_ (io_service)
	{
 
	}
 
	void Client::start()
	{
		boost::asio::async_read(socket_, boost::asio::buffer(message_), 
			boost::bind(&Client::handle_read, 
                                shared_from_this(), 
				boost::asio::placeholders::error));
	}
 
	pointer Client::create(boost::asio::io_service& ioservice)
	{
		return pointer(new Client(ioservice));
	}
 
	void Client::handle_read(const boost::system::error_code& error)
	{
		if(!error)
		{
 
		}
		start();
	}
 
	void Client::envoyer(std::string message)
	{
		boost::asio::write(socket_, boost::asio::buffer(message));
	}
 
	tcp::socket& Client::socket()
	{
		return socket_;
	}
et voici les message d'erreur du compilateur : (Attention c'est long ...)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
g++ -Wall -c "Client.cpp" (dans le dossier : /home/guy/Bureau/IRC/Serveur)
In file included from /usr/include/boost/bind.hpp:22:0,
                 from Client.hpp:5:
/usr/include/boost/bind/bind.hpp: In instantiation of ‘boost::_bi::result_traits<boost::_bi::unspecified, boost::shared_ptr<Client> >’:
/usr/include/boost/bind/bind_template.hpp:15:48:   instantiated from ‘boost::_bi::bind_t<boost::_bi::unspecified, boost::shared_ptr<Client>, boost::_bi::list2<boost::_bi::value<void (Client::*)(const boost::system::error_code&)>, boost::arg<1> (*)()> >’
Client.cpp:15:44:   instantiated from here
/usr/include/boost/bind/bind.hpp:69:37: erreur: no type named ‘result_type’ in ‘class boost::shared_ptr<Client>’
In file included from /usr/include/boost/asio/read.hpp:540:0,
                 from /usr/include/boost/asio.hpp:76,
                 from Client.hpp:6:
/usr/include/boost/asio/impl/read.hpp: In member function ‘void boost::asio::detail::read_op<AsyncReadStream, MutableBufferSequence, CompletionCondition, ReadHandler>::operator()(const boost::system::error_code&, std::size_t, int) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>, MutableBufferSequence = boost::asio::const_buffers_1, CompletionCondition = boost::asio::detail::transfer_all_t, ReadHandler = boost::_bi::bind_t<boost::_bi::unspecified, boost::shared_ptr<Client>, boost::_bi::list2<boost::_bi::value<void (Client::*)(const boost::system::error_code&)>, boost::arg<1> (*)()> >, std::size_t = unsigned int]’:
/usr/include/boost/asio/impl/read.hpp:263:3:   instantiated from ‘void boost::asio::async_read(AsyncReadStream&, const MutableBufferSequence&, CompletionCondition, ReadHandler) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>, MutableBufferSequence = boost::asio::const_buffers_1, CompletionCondition = boost::asio::detail::transfer_all_t, ReadHandler = boost::_bi::bind_t<boost::_bi::unspecified, boost::shared_ptr<Client>, boost::_bi::list2<boost::_bi::value<void (Client::*)(const boost::system::error_code&)>, boost::arg<1> (*)()> >]’
/usr/include/boost/asio/impl/read.hpp:274:3:   instantiated from ‘void boost::asio::async_read(AsyncReadStream&, const MutableBufferSequence&, ReadHandler) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>, MutableBufferSequence = boost::asio::const_buffers_1, ReadHandler = boost::_bi::bind_t<boost::_bi::unspecified, boost::shared_ptr<Client>, boost::_bi::list2<boost::_bi::value<void (Client::*)(const boost::system::error_code&)>, boost::arg<1> (*)()> >]’
Client.cpp:15:45:   instantiated from here
/usr/include/boost/asio/impl/read.hpp:163:9: erreur: no match for call to ‘(boost::_bi::bind_t<boost::_bi::unspecified, boost::shared_ptr<Client>, boost::_bi::list2<boost::_bi::value<void (Client::*)(const boost::system::error_code&)>, boost::arg<1> (*)()> >) (const boost::system::error_code&, const size_t&)’
In file included from /usr/include/boost/asio/impl/write.hpp:22:0,
                 from /usr/include/boost/asio/write.hpp:537,
                 from /usr/include/boost/asio/buffered_write_stream.hpp:30,
                 from /usr/include/boost/asio/buffered_stream.hpp:21,
                 from /usr/include/boost/asio.hpp:34,
                 from Client.hpp:6:
/usr/include/boost/asio/detail/consuming_buffers.hpp: In constructor ‘boost::asio::detail::consuming_buffers<Buffer, Buffers>::consuming_buffers(const Buffers&) [with Buffer = boost::asio::mutable_buffer, Buffers = boost::asio::const_buffers_1]’:
/usr/include/boost/asio/impl/read.hpp:140:25:   instantiated from ‘boost::asio::detail::read_op<AsyncReadStream, MutableBufferSequence, CompletionCondition, ReadHandler>::read_op(AsyncReadStream&, const MutableBufferSequence&, CompletionCondition, ReadHandler) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>, MutableBufferSequence = boost::asio::const_buffers_1, CompletionCondition = boost::asio::detail::transfer_all_t, ReadHandler = boost::_bi::bind_t<boost::_bi::unspecified, boost::shared_ptr<Client>, boost::_bi::list2<boost::_bi::value<void (Client::*)(const boost::system::error_code&)>, boost::arg<1> (*)()> >]’
/usr/include/boost/asio/impl/read.hpp:263:3:   instantiated from ‘void boost::asio::async_read(AsyncReadStream&, const MutableBufferSequence&, CompletionCondition, ReadHandler) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>, MutableBufferSequence = boost::asio::const_buffers_1, CompletionCondition = boost::asio::detail::transfer_all_t, ReadHandler = boost::_bi::bind_t<boost::_bi::unspecified, boost::shared_ptr<Client>, boost::_bi::list2<boost::_bi::value<void (Client::*)(const boost::system::error_code&)>, boost::arg<1> (*)()> >]’
/usr/include/boost/asio/impl/read.hpp:274:3:   instantiated from ‘void boost::asio::async_read(AsyncReadStream&, const MutableBufferSequence&, ReadHandler) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>, MutableBufferSequence = boost::asio::const_buffers_1, ReadHandler = boost::_bi::bind_t<boost::_bi::unspecified, boost::shared_ptr<Client>, boost::_bi::list2<boost::_bi::value<void (Client::*)(const boost::system::error_code&)>, boost::arg<1> (*)()> >]’
Client.cpp:15:45:   instantiated from here
/usr/include/boost/asio/detail/consuming_buffers.hpp:161:7: erreur: no match foroperator=’ in ‘((boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::const_buffers_1>*)this)->boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::const_buffers_1>::first_ = *((boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::const_buffers_1>*)this)->boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::const_buffers_1>::buffers_.boost::asio::const_buffers_1::begin()’
/usr/include/boost/asio/detail/consuming_buffers.hpp:161:7: note: candidate is:
/usr/include/boost/asio/buffer.hpp:72:7: note: boost::asio::mutable_buffer& boost::asio::mutable_buffer::operator=(const boost::asio::mutable_buffer&)
/usr/include/boost/asio/buffer.hpp:72:7: note:   no known conversion for argument 1 from ‘const boost::asio::const_buffer’ to ‘const boost::asio::mutable_buffer&’
/usr/include/boost/asio/detail/consuming_buffers.hpp: In member function ‘void boost::asio::detail::consuming_buffers<Buffer, Buffers>::consume(std::size_t) [with Buffer = boost::asio::mutable_buffer, Buffers = boost::asio::const_buffers_1, std::size_t = unsigned int]’:
/usr/include/boost/asio/impl/read.hpp:156:11:   instantiated from ‘void boost::asio::detail::read_op<AsyncReadStream, MutableBufferSequence, CompletionCondition, ReadHandler>::operator()(const boost::system::error_code&, std::size_t, int) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>, MutableBufferSequence = boost::asio::const_buffers_1, CompletionCondition = boost::asio::detail::transfer_all_t, ReadHandler = boost::_bi::bind_t<boost::_bi::unspecified, boost::shared_ptr<Client>, boost::_bi::list2<boost::_bi::value<void (Client::*)(const boost::system::error_code&)>, boost::arg<1> (*)()> >, std::size_t = unsigned int]’
/usr/include/boost/asio/impl/read.hpp:263:3:   instantiated from ‘void boost::asio::async_read(AsyncReadStream&, const MutableBufferSequence&, CompletionCondition, ReadHandler) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>, MutableBufferSequence = boost::asio::const_buffers_1, CompletionCondition = boost::asio::detail::transfer_all_t, ReadHandler = boost::_bi::bind_t<boost::_bi::unspecified, boost::shared_ptr<Client>, boost::_bi::list2<boost::_bi::value<void (Client::*)(const boost::system::error_code&)>, boost::arg<1> (*)()> >]’
/usr/include/boost/asio/impl/read.hpp:274:3:   instantiated from ‘void boost::asio::async_read(AsyncReadStream&, const MutableBufferSequence&, ReadHandler) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>, MutableBufferSequence = boost::asio::const_buffers_1, ReadHandler = boost::_bi::bind_t<boost::_bi::unspecified, boost::shared_ptr<Client>, boost::_bi::list2<boost::_bi::value<void (Client::*)(const boost::system::error_code&)>, boost::arg<1> (*)()> >]’
Client.cpp:15:45:   instantiated from here
/usr/include/boost/asio/detail/consuming_buffers.hpp:224:11: erreur: no match foroperator=’ in ‘((boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::const_buffers_1>*)this)->boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::const_buffers_1>::first_ = *(((boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::const_buffers_1>*)this)->boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::const_buffers_1>::begin_remainder_ ++)’
/usr/include/boost/asio/detail/consuming_buffers.hpp:224:11: note: candidate is:
/usr/include/boost/asio/buffer.hpp:72:7: note: boost::asio::mutable_buffer& boost::asio::mutable_buffer::operator=(const boost::asio::mutable_buffer&)
/usr/include/boost/asio/buffer.hpp:72:7: note:   no known conversion for argument 1 from ‘const boost::asio::const_buffer’ to ‘const boost::asio::mutable_buffer&’
/usr/include/boost/asio/detail/consuming_buffers.hpp:239:9: erreur: no match foroperator=’ in ‘((boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::const_buffers_1>*)this)->boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::const_buffers_1>::first_ = *(((boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::const_buffers_1>*)this)->boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::const_buffers_1>::begin_remainder_ ++)’
/usr/include/boost/asio/detail/consuming_buffers.hpp:239:9: note: candidate is:
/usr/include/boost/asio/buffer.hpp:72:7: note: boost::asio::mutable_buffer& boost::asio::mutable_buffer::operator=(const boost::asio::mutable_buffer&)
/usr/include/boost/asio/buffer.hpp:72:7: note:   no known conversion for argument 1 from ‘const boost::asio::const_buffer’ to ‘const boost::asio::mutable_buffer&’
/usr/include/boost/asio/detail/consuming_buffers.hpp: In member function ‘void boost::asio::detail::consuming_buffers_iterator<Buffer, Buffer_Iterator>::increment() [with Buffer = boost::asio::mutable_buffer, Buffer_Iterator = const boost::asio::const_buffer*]’:
/usr/include/boost/asio/detail/consuming_buffers.hpp:71:5:   instantiated from ‘boost::asio::detail::consuming_buffers_iterator<Buffer, Buffer_Iterator>& boost::asio::detail::consuming_buffers_iterator<Buffer, Buffer_Iterator>::operator++() [with Buffer = boost::asio::mutable_buffer, Buffer_Iterator = const boost::asio::const_buffer*, boost::asio::detail::consuming_buffers_iterator<Buffer, Buffer_Iterator> = boost::asio::detail::consuming_buffers_iterator<boost::asio::mutable_buffer, const boost::asio::const_buffer*>]’
/usr/include/boost/asio/detail/buffer_sequence_adapter.hpp:117:5:   instantiated from ‘static bool boost::asio::detail::buffer_sequence_adapter<Buffer, Buffers>::all_empty(const Buffers&) [with Buffer = boost::asio::mutable_buffer, Buffers = boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::const_buffers_1>]’
/usr/include/boost/asio/detail/reactive_socket_service_base.hpp:232:5:   instantiated from ‘void boost::asio::detail::reactive_socket_service_base::async_receive(boost::asio::detail::reactive_socket_service_base::base_implementation_type&, const MutableBufferSequence&, boost::asio::socket_base::message_flags, Handler) [with MutableBufferSequence = boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::const_buffers_1>, Handler = boost::asio::detail::read_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp>, boost::asio::const_buffers_1, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<boost::_bi::unspecified, boost::shared_ptr<Client>, boost::_bi::list2<boost::_bi::value<void (Client::*)(const boost::system::error_code&)>, boost::arg<1> (*)()> > >, boost::asio::socket_base::message_flags = int]’
/usr/include/boost/asio/stream_socket_service.hpp:263:5:   instantiated from ‘void boost::asio::stream_socket_service<Protocol>::async_receive(boost::asio::stream_socket_service<Protocol>::implementation_type&, const MutableBufferSequence&, boost::asio::socket_base::message_flags, ReadHandler) [with MutableBufferSequence = boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::const_buffers_1>, ReadHandler = boost::asio::detail::read_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp>, boost::asio::const_buffers_1, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<boost::_bi::unspecified, boost::shared_ptr<Client>, boost::_bi::list2<boost::_bi::value<void (Client::*)(const boost::system::error_code&)>, boost::arg<1> (*)()> > >, Protocol = boost::asio::ip::tcp, boost::asio::stream_socket_service<Protocol>::implementation_type = boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::implementation_type, boost::asio::socket_base::message_flags = int]’
/usr/include/boost/asio/basic_stream_socket.hpp:708:5:   instantiated from ‘void boost::asio::basic_stream_socket<Protocol, StreamSocketService>::async_read_some(const MutableBufferSequence&, ReadHandler) [with MutableBufferSequence = boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::const_buffers_1>, ReadHandler = boost::asio::detail::read_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp>, boost::asio::const_buffers_1, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<boost::_bi::unspecified, boost::shared_ptr<Client>, boost::_bi::list2<boost::_bi::value<void (Client::*)(const boost::system::error_code&)>, boost::arg<1> (*)()> > >, Protocol = boost::asio::ip::tcp, StreamSocketService = boost::asio::stream_socket_service<boost::asio::ip::tcp>]’
/usr/include/boost/asio/impl/read.hpp:153:11:   instantiated from ‘void boost::asio::detail::read_op<AsyncReadStream, MutableBufferSequence, CompletionCondition, ReadHandler>::operator()(const boost::system::error_code&, std::size_t, int) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>, MutableBufferSequence = boost::asio::const_buffers_1, CompletionCondition = boost::asio::detail::transfer_all_t, ReadHandler = boost::_bi::bind_t<boost::_bi::unspecified, boost::shared_ptr<Client>, boost::_bi::list2<boost::_bi::value<void (Client::*)(const boost::system::error_code&)>, boost::arg<1> (*)()> >, std::size_t = unsigned int]’
/usr/include/boost/asio/impl/read.hpp:263:3:   instantiated from ‘void boost::asio::async_read(AsyncReadStream&, const MutableBufferSequence&, CompletionCondition, ReadHandler) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>, MutableBufferSequence = boost::asio::const_buffers_1, CompletionCondition = boost::asio::detail::transfer_all_t, ReadHandler = boost::_bi::bind_t<boost::_bi::unspecified, boost::shared_ptr<Client>, boost::_bi::list2<boost::_bi::value<void (Client::*)(const boost::system::error_code&)>, boost::arg<1> (*)()> >]’
/usr/include/boost/asio/impl/read.hpp:274:3:   instantiated from ‘void boost::asio::async_read(AsyncReadStream&, const MutableBufferSequence&, ReadHandler) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>, MutableBufferSequence = boost::asio::const_buffers_1, ReadHandler = boost::_bi::bind_t<boost::_bi::unspecified, boost::shared_ptr<Client>, boost::_bi::list2<boost::_bi::value<void (Client::*)(const boost::system::error_code&)>, boost::arg<1> (*)()> >]’
Client.cpp:15:45:   instantiated from here
/usr/include/boost/asio/detail/consuming_buffers.hpp:110:9: erreur: no match foroperator=’ in ‘((boost::asio::detail::consuming_buffers_iterator<boost::asio::mutable_buffer, const boost::asio::const_buffer*>*)this)->boost::asio::detail::consuming_buffers_iterator<boost::asio::mutable_buffer, const boost::asio::const_buffer*>::first_ = boost::asio::buffer((*(((boost::asio::detail::consuming_buffers_iterator<boost::asio::mutable_buffer, const boost::asio::const_buffer*>*)this)->boost::asio::detail::consuming_buffers_iterator<boost::asio::mutable_buffer, const boost::asio::const_buffer*>::begin_remainder_ ++)), (((boost::asio::detail::consuming_buffers_iterator<boost::asio::mutable_buffer, const boost::asio::const_buffer*>*)this)->boost::asio::detail::consuming_buffers_iterator<boost::asio::mutable_buffer, const boost::asio::const_buffer*>::max_size_ - ((boost::asio::detail::consuming_buffers_iterator<boost::asio::mutable_buffer, const boost::asio::const_buffer*>*)this)->boost::asio::detail::consuming_buffers_iterator<boost::asio::mutable_buffer, const boost::asio::const_buffer*>::offset_))’
/usr/include/boost/asio/detail/consuming_buffers.hpp:110:9: note: candidate is:
/usr/include/boost/asio/buffer.hpp:72:7: note: boost::asio::mutable_buffer& boost::asio::mutable_buffer::operator=(const boost::asio::mutable_buffer&)
/usr/include/boost/asio/buffer.hpp:72:7: note:   no known conversion for argument 1 from ‘boost::asio::const_buffers_1’ to ‘const boost::asio::mutable_buffer&’
Compilation échouée.
Alors voila je vois pas d’où peux venir le problème. Je pense que cela viens du bind même si je n'en suis pas sur. Je suppute un problème d'inclusion ou installation de la lib de boost. Enfin sa fait un moment que je cherche et je n'ai rien trouvé pour le moment. Peut etre quelque commande à rajouter dans le compilation mais je ne sais pas quoi.

Je vous remercie de votre attention et bonne journée