IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Boost C++ Discussion :

boost spirit + boost bind, la galére


Sujet :

Boost C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif Avatar de Sahengette
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 79
    Par défaut boost spirit + boost bind, la galére
    Bonjour,
    je suis en blocage complet sur boost spirit,j'essaye de lancer une fonction membre d'un objet quand une régle est parsé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    struct ArgGrammar : qi::grammar<std::string::iterator, qi::blank_type>
    {
    	ArgGrammar(Arguments & O) : ArgGrammar::base_type(start)
    	{	
    		using qi::float_;
    		using qi::uint_;
    		using qi::char_;
    		using qi::eol;
    		using qi::eps;
    		using qi::blank;
    		using namespace boost;
     
    		param = "\""  >> *(char_[push_back(phoenix::ref(paramb), qi::_1)] - "\"") >> "\"" >> 
    		eps[bind(&Arguments::maFunc, O, qi::_1)("un parametre de type string")];
     
    		start = *(l | d | a | i);
    	}	
     
    	qi::rule<std::string::iterator, qi::blank_type> start, l, d, a, i, param, hour;
    	std::string paramb;
    	float hd, md, ha, ma;
    };
    Donc j'aimerais que lorsqu'il parse la régle param, il lance la fonction membre tel que O.maFunc("un parametre de type string"), seulement ca ne fonctionne pas, avez vous une idée du fonctionnement de bind avec spirit pour les fonctions membre, sachant que le paramétre est fixe (ne dépend pas de ce que je parse).

    Merci de votre attention à mon post.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Bonjour,

    Pourquoi tu passes pas un placeholder (qi::_1) si tu lui donne le paramètre juste après ? Ta fonction a un effet de bord ?

  3. #3
    Membre actif Avatar de Sahengette
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 79
    Par défaut
    sincérement, je ne sais pas, en lisant la doc je vois toujours ce placeholder, et j'avoue que je n'arrive pas trés bien à suivre la logique de spirit et bind.

    voici l'erreur avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    struct ArgGrammar : qi::grammar<std::string::iterator, qi::blank_type>
    {
    	ArgGrammar(Arguments & O) : ArgGrammar::base_type(start)
    	{	
    		using qi::float_;
    		using qi::uint_;
    		using qi::_1;
    		using qi::char_;
    		using qi::eol;
    		using qi::eps;
    		using qi::blank;
    		using namespace boost;
     
    		param = "\""  >> *(char_[push_back(phoenix::ref(paramb), _1)] - "\"") >> "\"" >> 
    		eps[boost::bind(&Arguments::newArg, O, "une chaine")];
     
    		start = *(l | d | a | i);
    	}	
     
    	qi::rule<std::string::iterator, qi::blank_type> start, l, d, a, i, param, hour;
    	std::string paramb;
    	float hd, md, ha, ma;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    /home/theodor/Programme/bus/src/Arguments.cpp:22:6: attention : unused parameter ‘na’ [-Wunused-parameter]
    In file included from /usr/include/boost/bind/mem_fn.hpp:215:0,
                     from /usr/include/boost/mem_fn.hpp:22,
                     from /usr/include/boost/function/detail/prologue.hpp:18,
                     from /usr/include/boost/function.hpp:24,
                     from /usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:16,
                     from /usr/include/boost/spirit/home/qi/nonterminal.hpp:14,
                     from /usr/include/boost/spirit/home/qi.hpp:20,
                     from /usr/include/boost/spirit/include/qi.hpp:16,
                     from /home/theodor/Programme/bus/src/Arguments.cpp:8:
    /usr/include/boost/bind/mem_fn_template.hpp: In instantiation of ‘R boost::_mfi::mf1<R, T, A1>::call(U&, const T*, B1&) const [with U = const Arguments; B1 = std::basic_string<char>; R = void; T = Arguments; A1 = std::basic_string<char>]’:
    /usr/include/boost/bind/mem_fn_template.hpp:179:42:   required from ‘R boost::_mfi::mf1<R, T, A1>::operator()(const U&, A1) const [with U = Arguments; R = void; T = Arguments; A1 = std::basic_string<char>]’
    /usr/include/boost/bind/bind.hpp:318:9:   required from ‘void boost::_bi::list2<A1, A2>::operator()(boost::_bi::type<void>, const F&, A&, int) const [with F = boost::_mfi::mf1<void, Arguments, std::basic_string<char> >; A = boost::_bi::list3<boost::spirit::unused_type&, boost::spirit::context<boost::fusion::cons<boost::spirit::unused_type&, boost::fusion::nil>, boost::fusion::vector0<> >&, bool&>; A1 = boost::_bi::value<Arguments>; A2 = boost::_bi::value<const char*>]’
    /usr/include/boost/bind/bind_template.hpp:122:59:   required from ‘boost::_bi::bind_t<R, F, L>::result_type boost::_bi::bind_t<R, F, L>::operator()(A1&, A2&, A3&) const [with A1 = boost::spirit::unused_type; A2 = boost::spirit::context<boost::fusion::cons<boost::spirit::unused_type&, boost::fusion::nil>, boost::fusion::vector0<> >; A3 = bool; R = void; F = boost::_mfi::mf1<void, Arguments, std::basic_string<char> >; L = boost::_bi::list2<boost::_bi::value<Arguments>, boost::_bi::value<const char*> >; boost::_bi::bind_t<R, F, L>::result_type = void]’
    /usr/include/boost/spirit/home/support/action_dispatch.hpp:95:33:   required from ‘decltype (f(a, b, c)) boost::spirit::traits::action_dispatch<Component>::fwd_attrib_context_pass::operator()(F&&, A&&, B&&, C&&, Rest&& ...) [with F = const boost::_bi::bind_t<void, boost::_mfi::mf1<void, Arguments, std::basic_string<char> >, boost::_bi::list2<boost::_bi::value<Arguments>, boost::_bi::value<const char*> > >&; A = boost::spirit::unused_type&; B = boost::spirit::context<boost::fusion::cons<boost::spirit::unused_type&, boost::fusion::nil>, boost::fusion::vector0<> >&; C = bool&; Rest = {}; Component = boost::spirit::qi::eps_parser; decltype (f(a, b, c)) = void]’
    /usr/include/boost/spirit/home/support/action_dispatch.hpp:142:13:   required from ‘static void boost::spirit::traits::action_dispatch<Component>::caller(F&&, A&& ...) [with F = const boost::_bi::bind_t<void, boost::_mfi::mf1<void, Arguments, std::basic_string<char> >, boost::_bi::list2<boost::_bi::value<Arguments>, boost::_bi::value<const char*> > >&; A = {boost::spirit::unused_type&, boost::spirit::context<boost::fusion::cons<boost::spirit::unused_type&, boost::fusion::nil>, boost::fusion::vector0<void> >&, bool&}; Component = boost::spirit::qi::eps_parser]’
    /usr/include/boost/spirit/home/support/action_dispatch.hpp:153:13:   [ skipping 11 instantiation contexts ]
    /usr/include/boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp:53:67:   required from ‘bool boost::spirit::qi::detail::parser_binder<Parser, Auto>::operator()(Iterator&, const Iterator&, Context&, const Skipper&) const [with Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; Skipper = boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::blank, boost::spirit::char_encoding::standard> >; Context = boost::spirit::context<boost::fusion::cons<boost::spirit::unused_type&, boost::fusion::nil>, boost::fusion::vector0<> >; Parser = boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::kleene<boost::spirit::qi::difference<boost::spirit::qi::action<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> >, boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::detail::function_eval<2>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::reference<std::basic_string<char> >, boost::spirit::argument<0>, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > > >, boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false> > >, boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::eps_parser, boost::_bi::bind_t<void, boost::_mfi::mf1<void, Arguments, std::basic_string<char> >, boost::_bi::list2<boost::_bi::value<Arguments>, boost::_bi::value<const char*> > > >, boost::fusion::nil> > > > >; Auto = mpl_::bool_<false>]’
    /usr/include/boost/function/function_template.hpp:132:42:   required from ‘static R boost::detail::function::function_obj_invoker4<FunctionObj, R, T0, T1, T2, T3>::invoke(boost::detail::function::function_buffer&, T0, T1, T2, T3) [with FunctionObj = boost::spirit::qi::detail::parser_binder<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::kleene<boost::spirit::qi::difference<boost::spirit::qi::action<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> >, boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::detail::function_eval<2>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::reference<std::basic_string<char> >, boost::spirit::argument<0>, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > > >, boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false> > >, boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::eps_parser, boost::_bi::bind_t<void, boost::_mfi::mf1<void, Arguments, std::basic_string<char> >, boost::_bi::list2<boost::_bi::value<Arguments>, boost::_bi::value<const char*> > > >, boost::fusion::nil> > > > >, mpl_::bool_<false> >; R = bool; T0 = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T1 = const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T2 = boost::spirit::context<boost::fusion::cons<boost::spirit::unused_type&, boost::fusion::nil>, boost::fusion::vector0<> >&; T3 = const boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::blank, boost::spirit::char_encoding::standard> >&]’
    /usr/include/boost/function/function_template.hpp:907:60:   required from ‘void boost::function4<R, T1, T2, T3, T4>::assign_to(Functor) [with Functor = boost::spirit::qi::detail::parser_binder<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::kleene<boost::spirit::qi::difference<boost::spirit::qi::action<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> >, boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::detail::function_eval<2>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::reference<std::basic_string<char> >, boost::spirit::argument<0>, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > > >, boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false> > >, boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::eps_parser, boost::_bi::bind_t<void, boost::_mfi::mf1<void, Arguments, std::basic_string<char> >, boost::_bi::list2<boost::_bi::value<Arguments>, boost::_bi::value<const char*> > > >, boost::fusion::nil> > > > >, mpl_::bool_<false> >; R = bool; T0 = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T1 = const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T2 = boost::spirit::context<boost::fusion::cons<boost::spirit::unused_type&, boost::fusion::nil>, boost::fusion::vector0<> >&; T3 = const boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::blank, boost::spirit::char_encoding::standard> >&]’
    /usr/include/boost/function/function_template.hpp:722:7:   required from ‘boost::function4<R, T1, T2, T3, T4>::function4(Functor, typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type) [with Functor = boost::spirit::qi::detail::parser_binder<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::kleene<boost::spirit::qi::difference<boost::spirit::qi::action<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> >, boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::detail::function_eval<2>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::reference<std::basic_string<char> >, boost::spirit::argument<0>, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > > >, boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false> > >, boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::eps_parser, boost::_bi::bind_t<void, boost::_mfi::mf1<void, Arguments, std::basic_string<char> >, boost::_bi::list2<boost::_bi::value<Arguments>, boost::_bi::value<const char*> > > >, boost::fusion::nil> > > > >, mpl_::bool_<false> >; R = bool; T0 = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T1 = const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T2 = boost::spirit::context<boost::fusion::cons<boost::spirit::unused_type&, boost::fusion::nil>, boost::fusion::vector0<> >&; T3 = const boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::blank, boost::spirit::char_encoding::standard> >&; typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type = int]’
    /usr/include/boost/function/function_template.hpp:1042:16:   required from ‘boost::function<R(T0, T1, T2, T3)>::function(Functor, typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type) [with Functor = boost::spirit::qi::detail::parser_binder<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::kleene<boost::spirit::qi::difference<boost::spirit::qi::action<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> >, boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::detail::function_eval<2>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::reference<std::basic_string<char> >, boost::spirit::argument<0>, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > > >, boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false> > >, boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::eps_parser, boost::_bi::bind_t<void, boost::_mfi::mf1<void, Arguments, std::basic_string<char> >, boost::_bi::list2<boost::_bi::value<Arguments>, boost::_bi::value<const char*> > > >, boost::fusion::nil> > > > >, mpl_::bool_<false> >; R = bool; T0 = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T1 = const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T2 = boost::spirit::context<boost::fusion::cons<boost::spirit::unused_type&, boost::fusion::nil>, boost::fusion::vector0<> >&; T3 = const boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::blank, boost::spirit::char_encoding::standard> >&; typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type = int]’
    /usr/include/boost/function/function_template.hpp:1083:5:   required from ‘typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, boost::function<R(T0, T1, T2, T3)>&>::type boost::function<R(T0, T1, T2, T3)>::operator=(Functor) [with Functor = boost::spirit::qi::detail::parser_binder<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::kleene<boost::spirit::qi::difference<boost::spirit::qi::action<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> >, boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::detail::function_eval<2>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::reference<std::basic_string<char> >, boost::spirit::argument<0>, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > > >, boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false> > >, boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::eps_parser, boost::_bi::bind_t<void, boost::_mfi::mf1<void, Arguments, std::basic_string<char> >, boost::_bi::list2<boost::_bi::value<Arguments>, boost::_bi::value<const char*> > > >, boost::fusion::nil> > > > >, mpl_::bool_<false> >; R = bool; T0 = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T1 = const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T2 = boost::spirit::context<boost::fusion::cons<boost::spirit::unused_type&, boost::fusion::nil>, boost::fusion::vector0<> >&; T3 = const boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::blank, boost::spirit::char_encoding::standard> >&; typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, boost::function<R(T0, T1, T2, T3)>&>::type = boost::function<bool(__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&, const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&, boost::spirit::context<boost::fusion::cons<boost::spirit::unused_type&, boost::fusion::nil>, boost::fusion::vector0<> >&, const boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::blank, boost::spirit::char_encoding::standard> >&)>&]’
    /usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:182:13:   required from ‘static void boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>::define(boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>&, const Expr&, mpl_::true_) [with Auto = mpl_::bool_<false>; Expr = boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char (&)[2]>, 0l>, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::dereference, boost::proto::argsns_::list1<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::minus, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<const boost::spirit::terminal<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> >&, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::detail::function_eval<2>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::reference<std::basic_string<char> >, boost::spirit::argument<0>, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > >&>, 0l> >, 2l>&, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char (&)[2]>, 0l> >, 2l>&>, 1l>&>, 2l>&, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char (&)[2]>, 0l> >, 2l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<const boost::spirit::terminal<boost::spirit::tag::eps>&, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const boost::_bi::bind_t<void, boost::_mfi::mf1<void, Arguments, std::basic_string<char> >, boost::_bi::list2<boost::_bi::value<Arguments>, boost::_bi::value<const char*> > >&>, 0l> >, 2l>&>, 2l>; Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; T1 = boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::blank, boost::spirit::char_encoding::standard> >, 0l>; T2 = boost::spirit::unused_type; T3 = boost::spirit::unused_type; T4 = boost::spirit::unused_type; boost::spirit::qi::rule<Iterator, T1, T2, T3, T4> = boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::blank, boost::spirit::char_encoding::standard> >, 0l>, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type>; mpl_::true_ = mpl_::bool_<true>]’
    /usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:220:13:   required from ‘boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>& boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>::operator=(const Expr&) [with Expr = boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char (&)[2]>, 0l>, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::dereference, boost::proto::argsns_::list1<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::minus, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<const boost::spirit::terminal<boost::spirit::tag::char_code<boost::spirit::tag::char_, boost::spirit::char_encoding::standard> >&, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::detail::function_eval<2>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::reference<std::basic_string<char> >, boost::spirit::argument<0>, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > >&>, 0l> >, 2l>&, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char (&)[2]>, 0l> >, 2l>&>, 1l>&>, 2l>&, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char (&)[2]>, 0l> >, 2l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<const boost::spirit::terminal<boost::spirit::tag::eps>&, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const boost::_bi::bind_t<void, boost::_mfi::mf1<void, Arguments, std::basic_string<char> >, boost::_bi::list2<boost::_bi::value<Arguments>, boost::_bi::value<const char*> > >&>, 0l> >, 2l>&>, 2l>; Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; T1 = boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::blank, boost::spirit::char_encoding::standard> >, 0l>; T2 = boost::spirit::unused_type; T3 = boost::spirit::unused_type; T4 = boost::spirit::unused_type; boost::spirit::qi::rule<Iterator, T1, T2, T3, T4> = boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::blank, boost::spirit::char_encoding::standard> >, 0l>, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type>]’
    /home/theodor/Programme/bus/src/Arguments.cpp:41:48:   required from here
    /usr/include/boost/bind/mem_fn_template.hpp:151:39: erreur: invalid conversion from ‘const Arguments*’ to ‘Arguments*’ [-fpermissive]
    make[2]: *** [CMakeFiles/bin/bin.dir/src/Arguments.cpp.o] Erreur 1
    make[1]: *** [CMakeFiles/bin/bin.dir/all] Erreur 2
    make: *** [all] Erreur 2
     
    le shell a retourné 2

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Regardes la doc de boost::bind, les exemples aident à comprendre.

    Tu ne m'as pas dit si ta fonction avaient des effets de bord ? Elle fait quoi exactement ?

    Tu pourrais faire voir la signature de la fonction membre que tu veux utiliser ?

  5. #5
    Membre actif Avatar de Sahengette
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 79
    Par défaut
    Cette fonction n'a pas vraiment d'effet de bord, en fonction de l'état interne de l'objet, elle remplit le bon tableau de ce même objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Arguments::newArg(std::string na)

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boost::bind(&Arguments::newArg, boost::ref(O), "une chaine")

  7. #7
    Membre actif Avatar de Sahengette
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 79
    Par défaut
    J'ai essayé ces trois formules, et les trois me sortent une erreur, si j'enlève l'epsilon ca compile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    param = "\""  >> *(char_[push_back(phoenix::ref(paramb), _1)] - "\"") >> "\"" >> eps[&Arguments::newArg, O, "test"];
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    param = "\""  >> *(char_[push_back(phoenix::ref(paramb), _1)] - "\"") >> "\"" >> eps[&Arguments::newArg, boost::ref(O), "test"];
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    param = "\""  >> *(char_[push_back(phoenix::ref(paramb), _1)] - "\"") >> "\"" >> eps[&Arguments::newArg, phoenix::ref(O), "test"];
    je ne peux pas vous rapporter l'erreur de compilation, developpez n'acceptant "que" 60 000 caractéres, le message en faisant 170 000

  8. #8
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Tu as oublié d'écrire boost::bind.

  9. #9
    Membre actif Avatar de Sahengette
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 79
    Par défaut
    C'est bizarre, ca marche mieux tout d'un coup .
    Merci, de m'avoir fait gagner du temps par cette aprés-midi chaude, qui m'a carrément zombifié le cerveau

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. boost::spirit trace et avancement.
    Par 3DArchi dans le forum Boost
    Réponses: 3
    Dernier message: 13/10/2008, 09h37
  2. [BOOST.Spirit] Absence génante
    Par Invité2 dans le forum Boost
    Réponses: 27
    Dernier message: 10/10/2008, 12h45
  3. [BOOST.Spirit] Types de bases inéxistant
    Par Invité2 dans le forum Boost
    Réponses: 4
    Dernier message: 14/09/2008, 21h31
  4. Comment utiliser Boost::spirit ?
    Par kimels dans le forum Boost
    Réponses: 8
    Dernier message: 11/06/2008, 19h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo