superbob56 | J'ai le code suivant :
Code :
- void displayEl(ostream &os, pair<string, string> el) {
- os << el.first << " = " << el.second << endl;
- }
- ostream& operator<< (ostream &os, const Config& config) {
- for_each<map<string, string>::const_iterator>(
- config._params.begin(),
- config._params.end(),
- boost::bind(
- &displayEl,
- os,
- _1));
- return os;
- }
|
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 :
Code :
- boost::bind<void (*)(ostream&, pair<string, string> ), ostream&, _1>(
- &displayEl,
- os,
- _1));
|
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.
|