解析错误示例

Example parsing error

本文关键字:错误      更新时间:2023-10-16

我正试图根据示例解析boost spirit(2.5.2)的一个示例。我的代码是以下

#include <boostspirithomeqi.hpp>
#include <iostream>
#include <string>
#include <utility>
int main()
{
  // Parsing two numbers
  std::string input("1.0 2.0");
  std::pair<double, double> p;
  boost::spirit::qi::phrase_parse(
    input.begin(),
    input.end(),
    boost::spirit::qi::double_ >> boost::spirit::qi::double_ , // Parse grammar
    boost::spirit::qi::space,
    p
  );
  return 0;
}

它几乎等于这里的例子,但当我用Visual studio 2010(32位,调试)编译它时,我得到了以下错误:

error C2440: 'static_cast': unable to convert from 'const double' to 'std::pair<_Ty1,_Ty2>'

(错误可能略有不同,我已经从意大利语翻译过来了)

我做错了什么?我如何才能成功编译这个例子?

提前感谢您的回复。

您缺少一个include:

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

它定义了属性分配规则,使Fusion序列(vector2<>)可分配给std::pair。

查看代码live:liveworkspace.org

#include <boost/spirit/include/qi.hpp>
#include <boost/fusion/adapted/std_pair.hpp>
#include <iostream>
#include <string>
#include <utility>
int main()
{
    // Parsing two numbers
    std::string input("1.2 3.4");
    std::pair<double, double> p;
    namespace qi = boost::spirit::qi;
    qi::phrase_parse(
            input.begin(), 
            input.end(),
            qi::double_ >> qi::double_ , // Parse grammar
            qi::space, p);
    std::cout << "Lo:     " << p.first << "n"
              << "Behold: " << p.second << "n";
}