boost::spirit -- 试图编译最简单代码的编译器错误
boost::spirit -- compiler error trying to compile most simple code
有人提到,这个问题已经有了答案。好吧,另一个人正在寻找关于 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;
}
尝试包括:
#include <boost/fusion/include/std_pair.hpp>
有人提到,这个问题已经有了答案。好吧,另一个人正在寻找关于 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;
}
尝试包括:
#include <boost/fusion/include/std_pair.hpp>