0

初めてSpiritライブラリを使おうとしています。今のところ楽しんでいますが、ドキュメントに大きく影響を受けた例を試しても、事前定義されたルールから文法を作成することはできません。

これが私の問題の核心です:

#include <boost/spirit/home/qi.hpp>
using boost::spirit::qi::ascii::space_type;
using boost::spirit::qi::grammar;
using boost::spirit::qi::phrase_parse;

template<typename P>
bool test_parser(char const* input, P const& p) {
  char const* f(input);
  char const* l(f + strlen(f));
  return parse(f, l, p) && f == l;
}

struct my_grammar : grammar<char const*, space_type> {
  my_grammar() : base_type(r) {
    r = boost::spirit::qi::int_;
  }
  rule<char const*, space_type> r;
} g;
bool b = test_phrase_parser("5", g);

そしてこれはコンパイラが言うことでした:

エラー:'test_phrase_parser(const char [6]、ph_files_parsing :: process_parsing :: test_method():: my_grammar&)'</p>を呼び出すための一致する関数がありません

注:候補者は:

注:テンプレートbool test_phrase_parser(const char *、const P&)

交換すればすべて正常に動作します

bool b = test_phrase_parser("5", g);

bool b = test_phrase_parser("5", boost::spirit::qi::int_);

助けてくれる人に感謝します。

(ブーストバージョンは1.48です)

4

1 に答える 1

1

あなたの質問は頻繁に尋ねられることがわかりました(下部にあります)。

文法にはスキップパーサーがあるため、次のコマンドで呼び出す必要があります。

 phrase_parse()

parse()の代わりに。例えば、

return phrase_parse(f, l, p, boost::spirit::ascii::space) && f == l;
于 2012-01-10T03:50:22.273 に答える