Boost::Bind und std::for_each
Verfasst: Di Nov 08, 2011 1:03 am
				
				Hallo, ich habe schon wieder ein Problem und kann den Fehler nicht finden( ich sollte aufhören so spät noch zu programmieren  )
 )
Ein paar Dinge zur Klarheit:
ReturningTable ist ein Result nach obigem Code. Ich versuche diese Funktion hier
 
über boost::bind mit dieser Funktion zusammenzustöpseln, aber der Kompiler beschwert sich mit 
Jemand eine Idee, was ich diesmal wieder einfach nicht sehen kann. Wenn es wieder ein Klammer ist, dann kriege ich die Krise   
 
Danke
			 )
 )Ein paar Dinge zur Klarheit:
Code: Alles auswählen
typedef Dedupe::Dataholding::Variant::Data * Value;
typedef std::map<std::string,Value> Row;
typedef std::vector<Row> Result;Code: Alles auswählen
Dedupe::FileStream Dataholding::FileGetter()
{
  Dedupe::FileStream ReturningStream;
  std::for_each( ReturningTable.begin(), ReturningTable.end(), boost::bind( Dataholding::TranslateSqlTableToFileInfo,  ReturningStream, _1 ) );
  return ReturningStream;
}über boost::bind mit dieser Funktion
Code: Alles auswählen
static void TranslateSqlTableToFileInfo( SqliteWrapper::Row Incoming,
                                          Dedupe::FileStream Output );Code: Alles auswählen
In file included from /usr/include/boost/bind.hpp:22:0,
                 from /home/bernhard/Programmieren/dedupe/trunk/dataholding/dataholding.h:13,
                 from /home/bernhard/Programmieren/dedupe/trunk/dataholding/dataholding.cpp:9:
/usr/include/boost/bind/bind.hpp: In member function ‘void boost::_bi::list2<A1, A2>::operator()(boost::_bi::type<void>, F&, A&, int) [with F = void (*)(std::map<std::basic_string<char>, Dedupe::Dataholding::Variant::Data*>, std::vector<Dedupe::FileInfo>), A = boost::_bi::list1<std::map<std::basic_string<char>, Dedupe::Dataholding::Variant::Data*>&>, A1 = boost::_bi::value<std::vector<Dedupe::FileInfo> >, A2 = boost::arg<1>]’:
/usr/include/boost/bind/bind_template.hpp:32:59:   instantiated from ‘boost::_bi::bind_t<R, F, L>::result_type boost::_bi::bind_t<R, F, L>::operator()(A1&) [with A1 = std::map<std::basic_string<char>, Dedupe::Dataholding::Variant::Data*>, R = void, F = void (*)(std::map<std::basic_string<char>, Dedupe::Dataholding::Variant::Data*>, std::vector<Dedupe::FileInfo>), L = boost::_bi::list2<boost::_bi::value<std::vector<Dedupe::FileInfo> >, boost::arg<1> >, boost::_bi::bind_t<R, F, L>::result_type = void]’
/usr/include/c++/4.6/bits/stl_algo.h:4379:2:   instantiated from ‘_Funct std::for_each(_IIter, _IIter, _Funct) [with _IIter = __gnu_cxx::__normal_iterator<std::map<std::basic_string<char>, Dedupe::Dataholding::Variant::Data*>*, std::vector<std::map<std::basic_string<char>, Dedupe::Dataholding::Variant::Data*> > >, _Funct = boost::_bi::bind_t<void, void (*)(std::map<std::basic_string<char>, Dedupe::Dataholding::Variant::Data*>, std::vector<Dedupe::FileInfo>), boost::_bi::list2<boost::_bi::value<std::vector<Dedupe::FileInfo> >, boost::arg<1> > >]’
/home/bernhard/Programmieren/dedupe/trunk/dataholding/dataholding.cpp:95:142:   instantiated from here
/usr/include/boost/bind/bind.hpp:313:9: error: could not convert ‘(& a)->boost::_bi::list1<A1>::operator[] [with T = std::vector<Dedupe::FileInfo>, A1 = std::map<std::basic_string<char>, Dedupe::Dataholding::Variant::Data*>&]((* &((boost::_bi::list2<boost::_bi::value<std::vector<Dedupe::FileInfo> >, boost::arg<1> >*)this)->boost::_bi::list2<boost::_bi::value<std::vector<Dedupe::FileInfo> >, boost::arg<1> >::<anonymous>.boost::_bi::storage2<boost::_bi::value<std::vector<Dedupe::FileInfo> >, boost::arg<1> >::<anonymous>.boost::_bi::storage1<boost::_bi::value<std::vector<Dedupe::FileInfo> > >::a1_))’ from ‘std::vector<Dedupe::FileInfo>’ to ‘std::map<std::basic_string<char>, Dedupe::Dataholding::Variant::Data*>’
 
 Danke

 Und denk dran, ich benutzte noch keine Features aus dem neuen Standard, sonst würde ich momentan viel zu viele Kompiler ausschließen. Darüber könnte man sich mal Gedanken machen, aber momentan bin ich beim "alten" C++. Das sind immer so einfache banale Fehler, aber ab einer bestimmten länge der Fehlermeldungen, bin ich immer überfordert, weil es total unübersichtlich wird. Hier die aktuelle Fehlermeldung:
 Und denk dran, ich benutzte noch keine Features aus dem neuen Standard, sonst würde ich momentan viel zu viele Kompiler ausschließen. Darüber könnte man sich mal Gedanken machen, aber momentan bin ich beim "alten" C++. Das sind immer so einfache banale Fehler, aber ab einer bestimmten länge der Fehlermeldungen, bin ich immer überfordert, weil es total unübersichtlich wird. Hier die aktuelle Fehlermeldung: