1

例に従ってブーストスピリット(2.5.2)の例を解析しようとしています。私のコードは次のとおりです

#include <boost\spirit\home\qi.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>'

(エラーは少し異なる場合があります。イタリア語から翻訳しました)

私が間違っていることは何ですか?どうすれば例を正常にコンパイルできますか?

返信ありがとうございます。

4

1 に答える 1

2

インクルードがありません:

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

Fusion シーケンス (vector2<>) を std::pair に割り当て可能にするための属性割り当て規則を定義します。

コードをライブで見る: 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";
}
于 2012-08-31T01:23:48.760 に答える