Need help in understanding boost lambda compile error:

Need help in understanding boost lambda compile error: I have this line of code: where grlpVector is vector<GroupResultListProcessor*> for_each(grlpVector.begin(), grlpVector.end(), boost::lambda::bind(&GroupResultListProcessorExecuter::do_process, this, *_1)); But I get this compile error, can you help me understand what's wrong? /usr/include/boost/tuple/detail/tuple_basic.hpp: In instantiation of 'boost::tuples::cons<GroupResultListProcessor, boost::tuples::null_type>': /usr/include/boost/tuple/detail/tuple_basic.hpp:329: instantiated from 'boost::tuples::cons<GroupResultListProcessorExecuter* const, boost::tuples::cons<GroupResultListProcessor, boost::tuples::null_type> >' /usr/include/boost/tuple/detail/tuple_basic.hpp:329: instantiated from 'boost::tuples::cons<void (GroupResultListProcessorExecuter::* const)(GroupResultListProcessor&), boost::tuples::cons<GroupResultListProcessorExecuter* const, boost::tuples::cons<GroupResultListProcessor, boost::tuples::null_type> > >' /usr/include/boost/lambda/detail/lambda_functor_base.hpp:151: instantiated from 'const bool boost::lambda::detail::has_null_type<boost::tuples::cons<void (GroupResultListProcessorExecuter::* const)(GroupResultListProcessor&), boost::tuples::cons<GroupResultListProcessorExecuter* const, boost::tuples::cons<GroupResultListProcessor, boost::tuples::null_type> > > >::value' /usr/include/boost/lambda/detail/lambda_functor_base.hpp:229: instantiated from 'boost::lambda::detail::deduce_non_ref_argument_types<boost::tuples::tuple<void (GroupResultListProcessorExecuter::* const)(GroupResultListProcessor&), GroupResultListProcessorExecuter* const, const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::other_action<boost::lambda::contentsof_action>, boost::tuples::tuple<boost::lambda::lambda_functor<boost::lambda::placeholder<1>
, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type>, boost::tuples::tuple<GroupResultListProcessor*&, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> >' /usr/include/boost/lambda/detail/lambda_functor_base.hpp:412: instantiated from 'boost::lambda::lambda_functor_base<boost::lambda::action<3, boost::lambda::function_action<3, boost::lambda::detail::unspecified> , boost::tuples::tuple<void (GroupResultListProcessorExecuter::* const)(GroupResultListProcessor&), GroupResultListProcessorExecuter* const, const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::other_action<boost::lambda::contentsof_action>, boost::tuples::tuple<boost::lambda::lambda_functor<boost::lambda::placeholder<1> , boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> ::sig<boost::tuples::tuple<GroupResultListProcessor*&, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> >' /usr/lib/gcc/i386-redhat-linux/4.0.2/../../../../include/c++/4.0.2/bits/stl_algo.h:158: instantiated from '_Function std::for_each(_InputIterator, _InputIterator, _Function) [with _InputIterator = __gnu_cxx::__normal_iterator<GroupResultListProcessor**, std::vector<GroupResultListProcessor*, std::allocator<GroupResultListProcessor*> > >, _Function = boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<3, boost::lambda::function_action<3, boost::lambda::detail::unspecified> , boost::tuples::tuple<void (GroupResultListProcessorExecuter::* const)(GroupResultListProcessor&), GroupResultListProcessorExecuter* const, const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::other_action<boost::lambda::contentsof_action>, boost::tuples::tuple<boost::lambda::lambda_functor<boost::lambda::placeholder<1> , boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >]' ../GroupResultListProcessorExecutor.cpp:30: instantiated from here /usr/include/boost/tuple/detail/tuple_basic.hpp:419: error: cannot declare field 'boost::tuples::cons<GroupResultListProcessor, boost::tuples::null_type>::head' to be of abstract type 'GroupResultListProcessor' ../GroupResultListProcessor.h:15: note: because the following virtual functions are pure within 'GroupResultListProcessor': ../GroupResultListProcessor.h:17: note: virtual void GroupResultListProcessor::process(GroupResultList&) make: *** [GroupResultListProcessorExecutor.o] Error 1

Meryl Silverburgh wrote:
Need help in understanding boost lambda compile error:
I have this line of code: where grlpVector is vector<GroupResultListProcessor*>
for_each(grlpVector.begin(), grlpVector.end(), boost::lambda::bind(&GroupResultListProcessorExecuter::do_process, this, *_1));
This looks a bit like a bug in Lambda to me - it tries to instantiate a boost::tuple with a member of type GroupResultListProcessor, which fails because this class is abstract. As a workaround, try this: for_each(grlpVector.begin(), grlpVector.end(), boost::lambda::bind(&GroupResultListProcessorExecuter::do_process, this, boost::ref(*_1))); I don't know if that will compile, though.

Thanks. I tried that, but that did not help. Thank you. --- Sebastian Redl <sebastian.redl@getdesigned.at> wrote:
Meryl Silverburgh wrote:
Need help in understanding boost lambda compile error:
I have this line of code: where grlpVector is vector<GroupResultListProcessor*>
for_each(grlpVector.begin(), grlpVector.end(),
boost::lambda::bind(&GroupResultListProcessorExecuter::do_process,
this, *_1));
This looks a bit like a bug in Lambda to me - it tries to instantiate a boost::tuple with a member of type GroupResultListProcessor, which fails because this class is abstract.
As a workaround, try this:
for_each(grlpVector.begin(), grlpVector.end(),
boost::lambda::bind(&GroupResultListProcessorExecuter::do_process,
this, boost::ref(*_1)));
I don't know if that will compile, though. _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users
__________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com
participants (3)
-
Meryl Silverburgh
-
Sebastian Redl
-
yinglcs2@yahoo.com