Bonjour,

J'utilise boost::asio pour établir une connexion tcp. Avec un exemple simple (tout dans une classe) pas de problème.

Mais quand je veux organiser un peu les choses en décomposant mon code en :

-Une classe qui établit la connexion. (1)
-Une classe qui gère les échanges sur la socket. (2)
-etc...

La manipulation de l'objet Socket me poste un problème. En effet, une fois la connexion établit par ma classe (1), il me faut transmettre l'objet Socket à ma classe (2) pour que celle-ci puisse y lire et y écrire les informations.

J'ai donc essayé de mettre l'objet Socket en attribut de ma classe (1) et, une fois la connexion établit, passer en paramètre de mon appel à la classe (2) la Socket. Mais j'obtiens des erreurs noncopyable comme suit :

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
 
 
Classe(1).c: In constructor ‘Classe(1)::Classe(1)()’:
Classe(1).c:8: error: no matching function for call to ‘boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::basic_stream_socket()’
/usr/include/boost/asio/basic_stream_socket.hpp:127: note: candidates are: boost::asio::basic_stream_socket<Protocol, StreamSocketService>::basic_stream_socket(boost::asio::io_service&, const Protocol&, const typename StreamSocketService::native_type&) [with Protocol = boost::asio::ip::tcp, StreamSocketService = boost::asio::stream_socket_service<boost::asio::ip::tcp>]
/usr/include/boost/asio/basic_stream_socket.hpp:107: note:                 boost::asio::basic_stream_socket<Protocol, StreamSocketService>::basic_stream_socket(boost::asio::io_service&, const typename Protocol::endpoint&) [with Protocol = boost::asio::ip::tcp, StreamSocketService = boost::asio::stream_socket_service<boost::asio::ip::tcp>]
/usr/include/boost/asio/basic_stream_socket.hpp:86: note:                 boost::asio::basic_stream_socket<Protocol, StreamSocketService>::basic_stream_socket(boost::asio::io_service&, const Protocol&) [with Protocol = boost::asio::ip::tcp, StreamSocketService = boost::asio::stream_socket_service<boost::asio::ip::tcp>]
/usr/include/boost/asio/basic_stream_socket.hpp:69: note:                 boost::asio::basic_stream_socket<Protocol, StreamSocketService>::basic_stream_socket(boost::asio::io_service&) [with Protocol = boost::asio::ip::tcp, StreamSocketService = boost::asio::stream_socket_service<boost::asio::ip::tcp>]
/usr/include/boost/asio/basic_stream_socket.hpp:49: note:                 boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::basic_stream_socket(const boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >&)
Classe(1).c: In static member function ‘static void Classe(1)::thread_Connect(Classe(1)*)’:
Classe(1).c:62: error: no match for call to ‘(boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >) (boost::asio::io_service&)’
Classe(1).c:69: error: no matching function for call to ‘Classe(2)::lancerEchange(boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >)’
Classe(2).h:40: note: candidates are: void Classe(2)::lancerEchange(boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*)
In file included from /usr/include/boost/asio/basic_socket.hpp:25,
                 from /usr/include/boost/asio/basic_datagram_socket.hpp:26,
                 from /usr/include/boost/asio.hpp:21,
                 from Classe(2).h:10,
                 from Classe(1).h:8,
                 from Classe(1).c:2:
/usr/include/boost/noncopyable.hpp: In copy constructor ‘boost::asio::basic_io_object<boost::asio::stream_socket_service<boost::asio::ip::tcp> >::basic_io_object(const boost::asio::basic_io_object<boost::asio::stream_socket_service<boost::asio::ip::tcp> >&)’:
/usr/include/boost/noncopyable.hpp:27: error: ‘boost::noncopyable_::noncopyable::noncopyable(const boost::noncopyable_::noncopyable&)’ is private
/usr/include/boost/asio/basic_io_object.hpp:30: error: within this context
In file included from /usr/include/boost/asio/datagram_socket_service.hpp:32,
                 from /usr/include/boost/asio/basic_datagram_socket.hpp:27,
                 from /usr/include/boost/asio.hpp:21,
                 from Classe(2).h:10,
                 from Classe(1).h:8,
                 from Classe(1).c:2:
/usr/include/boost/noncopyable.hpp: In copy constructor ‘boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp, boost::asio::detail::epoll_reactor<false> >::implementation_type::implementation_type(const boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp, boost::asio::detail::epoll_reactor<false> >::implementation_type&)’:
/usr/include/boost/noncopyable.hpp:27: error: ‘boost::noncopyable_::noncopyable::noncopyable(const boost::noncopyable_::noncopyable&)’ is private
/usr/include/boost/asio/detail/reactive_socket_service.hpp:58: error: within this context
In file included from /usr/include/boost/asio/basic_socket.hpp:25,
                 from /usr/include/boost/asio/basic_datagram_socket.hpp:26,
                 from /usr/include/boost/asio.hpp:21,
                 fromClasse(2).h:10,
                 from Classe(1).h:8,
                 from Classe(1).c:2:
/usr/include/boost/asio/basic_io_object.hpp: In copy constructor ‘boost::asio::basic_io_object<boost::asio::stream_socket_service<boost::asio::ip::tcp> >::basic_io_object(const boost::asio::basic_io_object<boost::asio::stream_socket_service<boost::asio::ip::tcp> >&)’:
/usr/include/boost/asio/basic_io_object.hpp:30: note: synthesized method ‘boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp, boost::asio::detail::epoll_reactor<false> >::implementation_type::implementation_type(const boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp, boost::asio::detail::epoll_reactor<false> >::implementation_type&)’ first required here 
In file included from /usr/include/boost/asio/basic_datagram_socket.hpp:26,
                 from /usr/include/boost/asio.hpp:21,
                 from Classe(2).h:10,
                 from Classe(1).h:8,
                 from Classe(1).c:2:
/usr/include/boost/asio/basic_socket.hpp: In copy constructor ‘boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::basic_socket(const boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >&)’:
/usr/include/boost/asio/basic_socket.hpp:45: note: synthesized method ‘boost::asio::basic_io_object<boost::asio::stream_socket_service<boost::asio::ip::tcp> >::basic_io_object(const boost::asio::basic_io_object<boost::asio::stream_socket_service<boost::asio::ip::tcp> >&)’ first required here 
In file included from /usr/include/boost/asio.hpp:29,
                 from Classe(2).h:10,
                 from Classe(1).h:8,
                 from Classe(1).c:2:
/usr/include/boost/asio/basic_stream_socket.hpp: In copy constructor ‘boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::basic_stream_socket(const boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >&)’:
/usr/include/boost/asio/basic_stream_socket.hpp:49: note: synthesized method ‘boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::basic_socket(const boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >&)’ first required here 
Classe(1).c: In member function ‘boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > Classe(1)::getSocket()’:
Classe(1).c:86: note: synthesized method ‘boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::basic_stream_socket(const boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >&)’ first required here 
make: *** [Classe(1).o] Erreur 1