有人提到,这个问题已经有了答案。好吧,另一个人正在寻找有关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;
}
答案 0 :(得分:1)
尝试包括:
#include <boost/fusion/include/std_pair.hpp>