Я пытаюсь разобрать строку в utree, используя следующий код:
void Parse(const std::string& testString, const MyGrammar<const char*>& parser)
{
char const* first = testString.c_str();
char const* last = &first[testString.size()];
boost::spirit::utree tree;
boost::spirit::qi::parse(first,last,parser,tree);
std::cout << "tree: " << tree << '\n';
}
где MyGrammar
namespace spirit = boost::spirit;
class MyGrammar : public spirit::qi::grammar<Iterator, spirit::utree(), spirit::qi::space_type>
{
...
}
Но это не скомпилируется со следующим сообщением:
Ошибка 1 ошибка C2664: «bool boost :: function4 :: operator () (T0, T1, T2, T3) const»: невозможно преобразовать параметр 4 из «const boost :: spirit :: unused_type» в «const boost :: spirit» :: qi :: char_class ‘c: \ program files \ etas \ etasadlib \ boost \ 1.49.0 \ include \ boost \ spirit \ home \ qi \ nonterminal \ rule.hpp 303 MyGrammarTest
Кто-нибудь может мне помочь?
Я нашел следующий пост от sehe: boost :: qi :: parse, кажется, вызывает ошибки компиляции который отвечает на этот вопрос: мне нужно использовать фразу_парс со шкипером
boost::spirit::qi::phrase_parse(first,last,parser, boost::spirit::qi::space,tree);
Других решений пока нет …