使用删除的函数CONSTRUCTOR,没有匹配函数进行调用

时间:2015-09-08 07:01:58

标签: c++ boost boost-spirit

此代码在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()函数),但我想一次解决一个问题。

1 个答案:

答案 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;
}