私はBoost.Qi初心者ですので、私はいくつかの簡単な例を試してみてください。オプションのパーサーでBoost.Qiコンパイラエラーが発生しました
文字列内の各コンポーネント間に任意の量の空白があります。 A:
などの部分は固定されており、整数値を解析したいと思います。上記の例では、文字列の3番目の要素、C:3
はオプションです。私は、このアプリケーションにBoost.Qiをテストするには、次の簡単な例を思い付いた:
#include <boost/optional.hpp>
#include <boost/spirit/include/qi.hpp>
#include <iostream>
namespace qi = boost::spirit::qi;
int main()
{
std::string s = "A:1 B:2 C:3";
int a, b;
boost::optional<int> c;
if (!qi::parse(s.begin(), s.end(),
qi::lit("A:") >> qi::int_ >> +qi::space >> "B:" >> qi::int_ >>
-(+qi::space >> "C:" >> qi::int_), a, b, c))
{
std::cout << "failed to parse" << std::endl;
}
std::cout << a << ' ' << b << ' ' << c.value_or(-1) << std::endl;
}
しかし、これは(C++ 11モードでブーストv1.58およびg ++ 5.4.0を使用して)コンパイルに失敗しました。 C++テンプレート・エラー・メッセージの典型的な海の中で、私は次を見つける:
spirit.cc:15:55: required from here
/usr/include/boost/spirit/home/support/container.hpp:130:12: error: ‘int’ is not a class, struct, or union type
struct container_value
と
spirit.cc:15:55: required from here
/usr/include/boost/spirit/home/qi/detail/pass_container.hpp:316:66: error: no type named ‘type’ in ‘struct boost::spirit::traits::container_value<int, void>’
typedef typename traits::container_value<Attr>::type value_type;
^
/usr/include/boost/spirit/home/qi/detail/pass_container.hpp:329:15: error: no type named ‘type’ in ‘struct boost::spirit::traits::container_value<int, void>’
は、私がここで間違ってやっている誰にもそれは明らかですか?
私はあなたが明示的に[省略](http://www.boost.org/doc/libs/1_60_0/libs/spirit/docする必要があると思います/html/spirit/qi/reference/directive/omit.html)あなたはその属性に興味がないので、 '+ qi :: space'の両方が出現します。 –