Résolu - Soucis avec boost::bind - C++ - Programmation
Marsh Posté le 12-06-2009 à 12:01:30
Hello,
Pour passer un objet par référence dans boost:bind il faut utiliser un boost::ref
Tu as des exemples dans la doc de boost::bind -> http://www.boost.org/doc/libs/1_39 [...] /bind.html
Marsh Posté le 12-06-2009 à 15:59:21
Amonchakai a écrit : Hello, |
Merci, ça marche nickel maintenant.
Marsh Posté le 12-06-2009 à 10:54:15
J'ai le code suivant :
Et le compilo me sort l'erreur suivante :
c:\mingw\bin\../lib/gcc/mingw32/4.3.0/include/c++/bits/ios_base.h: In copy constructor 'std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >& )':
c:\mingw\bin\../lib/gcc/mingw32/4.3.0/include/c++/bits/ios_base.h:783: error: 'std::ios_base::ios_base(const std::ios_base& )' is private
c:\mingw\bin\../lib/gcc/mingw32/4.3.0/include/c++/iosfwd:52: error: within this context
c:\mingw\bin\../lib/gcc/mingw32/4.3.0/include/c++/iosfwd: In copy constructor 'std::basic_ostream<char, std::char_traits<char> >::basic_ostream(const std::basic_ostream<char, std::char_traits<char> >& )':
c:\mingw\bin\../lib/gcc/mingw32/4.3.0/include/c++/iosfwd:61: note: synthesized method 'std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >& )' first required here
..\src\Config.cpp: In function 'std::ostream& operator<<(std::ostream&, const Config& )':
..\src\Config.cpp:113: note: synthesized method 'std::basic_ostream<char, std::char_traits<char> >::basic_ostream(const std::basic_ostream<char, std::char_traits<char> >& )' first required here
..\src\Config.cpp:113: error: initializing argument 2 of 'boost::_bi::bind_t<R, R (*)(B1, B2), typename boost::_bi::list_av_2<A1, A2>::type> boost::bind(R (*)(B1, B2), A1, A2) [with R = void, B1 = std::ostream&, B2 = std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, A1 = std::basic_ostream<char, std::char_traits<char> >, A2 = boost::arg<1>]'
Build error occurred, build is stopped
Si je comprends bien, le problème vient de boost::bind, car il 'comprends' que mon premier argument de la fonction est un 'ostream' et comme ostream n'est pas copiable (copy constructor privé) ça plante, alors que ça devrait être un 'ostream &'.
Je ne sais pas pourquoi il comprends ostream et pas ostream &. Sachant que le paramètre utilisé (os) est à la base un 'ostream &'.
J'ai essayé en précisant les arguments de templates comme ceci :
Mais il ne comprends plus rien et me dit ça :
..\src\Config.cpp: In function 'std::ostream& operator<<(std::ostream&, const Config& )':
..\src\Config.cpp:113: error: no matching function for call to 'bind(void (*)(std::ostream&, std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > ), std::basic_ostream<char, std::char_traits<char> >&, boost::arg<1>& )'
Build error occurred, build is stopped
Donc voilà, je suis un peu paumé ... :s
Message édité par superbob56 le 12-06-2009 à 16:01:25
---------------
By bob.