boost :: spirit-尝试编译最简单的代码时出现编译器错误

时间:2018-07-17 18:25:42

标签: c++ compiler-errors boost-spirit-qi

有人提到,这个问题已经有了答案。好吧,另一个人正在寻找有关boost :: spirit的解析错误。由于boost :: spirit是一种解析器生成器,因此人们可能认为他想知道如何生成良好的解析错误。我正在寻找解决编译器错误的方法。

当我尝试编译下面的代码时,总是会遇到编译器错误,即std :: pair不能从单个int构造。什么?

#include <boost/spirit/include/qi.hpp>


namespace qi = boost::spirit::qi;
namespace spirit = boost::spirit;
namespace ascii = boost::spirit::ascii;

template<typename Iterator>
struct pair:qi::grammar<Iterator, std::pair<int, int>(), ascii::space_type>
{   
    qi::rule<Iterator, std::pair<int, int>(), ascii::space_type> m_sNameValue;
    pair(void)
        :pair::base_type(m_sNameValue)
    {   m_sNameValue %= spirit::int_ >> spirit::int_;
    }
};

int main(int, char**)
{
    static const char s_ap[] = "3 4";
    pair<const char*> sGrammar;
    const char *pIter = s_ap;
    const char *const pEnd = s_ap + sizeof s_ap;
    std::pair<int, int> sValues;
    if (phrase_parse(pIter, pEnd, sGrammar, boost::spirit::ascii::space, sValues) && pIter == pEnd)
        std::cerr << "parsing successful!" << std::endl;
    else
        std::cerr << "parsing failed!" << std::endl;
}

1 个答案:

答案 0 :(得分:1)

尝试包括:

#include <boost/fusion/include/std_pair.hpp>

相关问题