此代码在My_grammar g;
行给出了以下错误:
no matching function for call to boost::spirit::qi::grammar<My_grammar>::grammar()’
use of deleted function ‘My_grammar::My_grammar()’
我没有得到它,是不是应该有默认(未删除)的构造函数?但问题可能在其他地方。
我实现了一个构造函数,但它带来了新的错误,教程/示例从不使用相同的方法(一些使用构造函数,一些没有),或者使用类,我,doc,编译器或google了解任何事情(CParser ??)。我想这可能是因为我(不要)包括标题,因为我可以在boost / spirit下选择很多。同样,可能过时的教程中的人似乎不包含相同的内容,或者使用那些与我昨天不同的apt-get提取的内容,最有可能是最新的版本提升。我正在使用Eclipse,以防它发生任何变化。
#include <iostream>
#include <cstdlib>
#include <string>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/qi_rule.hpp>
using namespace boost::spirit;
#define BOOST_SPIRIT_DEBUG
struct My_grammar :
public boost::spirit::qi::grammar<My_grammar>
{
public:
template <typename ScannerT>
struct definition
{
public:
definition(My_grammar const& self)
{
sentence
= 'a';
}
boost::spirit::qi::rule<ScannerT> sentence;
boost::spirit::qi::rule<ScannerT> const& start() const { return sentence; }
};
};
int main() {
My_grammar g;
return EXIT_SUCCESS;
}
我觉得接下来会有更多问题(例如:我已经尝试过并且没有使用parse()函数),但我想一次解决一个问题。
答案 0 :(得分:0)
看起来你已经陷入了古典&#34;灵魂解析器骨架。
Spirit V2非常不同,并且已经取代了V1:
以下是你如何在Spirit V2中编写语法定义:
#define BOOST_SPIRIT_DEBUG
#include <boost/spirit/include/qi.hpp>
namespace qi = boost::spirit::qi;
template <typename It>
struct My_grammar : public qi::grammar<It> {
My_grammar() : My_grammar::base_type(sentence) {
sentence = 'a';
}
qi::rule<It> sentence;
};
int main() {
My_grammar<std::string::const_iterator> g;
}