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