【发布时间】:2011-06-14 02:20:15
【问题描述】:
这是一个示例代码
#include <boost/config/warning_disable.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <iostream>
#include <string>
namespace qi = boost::spirit::qi;
template <typename Iterator>
struct input : qi::grammar<Iterator, unsigned()>
{
input() : input::base_type(start)
{
using qi::lit;
using qi::double_;
start = lit("ADD")
>> +(
+lit(" ")
>> double_
>> +lit(" ")
>> double_
);
}
qi::rule<Iterator, unsigned()> start;
};
int main()
{
input<std::string::const_iterator> input_parser; // Our grammar
std::string str = "ADD 1132.324 2342.234";
unsigned result;
std::string::const_iterator iter = str.begin();
std::string::const_iterator end = str.end();
bool r = qi::parse(iter, end, input_parser, result);
}
我收到以下错误。
/usr/local/include/boost/spirit/home/qi/nonterminal/rule.hpp:201: 实例化自 `boost::spirit::qi::rule& boost::spirit::qi::rule::operator=(const Expr&) [与 Expr = boost::proto::exprns_::expr&, 常量 boost::proto::exprns_::expr&>, 1l>&, 常量 boost::spirit::终端&>, 2l>&, 常量 boost::proto::exprns_::expr&>, 1l>&>, 2l>&, 常量 boost::spirit::终端&>, 2l>&>, 1l>&>, 2l>, 迭代器 = __gnu_cxx::__normal_iterator, 标准::分配器 > >, T1 = 无符号整数 ()(), T2 = boost::fusion::unused_type, T3 = boost::fusion::unused_type, T4 = boost::fusion::unused_type]’ mini.c++:34: 实例化自 â€〜输入::输入()[与 迭代器 = __gnu_cxx::__normal_iterator, std::allocator > >]’ mini.c++:49: 从这里实例化 /usr/local/include/boost/spirit/home/qi/operator/plus.hpp:62: 错误:没有名为“类型”的类型 ~结构 boost::spirit::traits::container_value——
奇怪的是,如果我使用减号 (-) 操作,即
start = lit("ADD")
>> -(
+lit(" ")
>> double_
>> +lit(" ")
>> double_
);
...它编译得非常好!
在 gcc 4.3.4 上编译。
【问题讨论】:
标签: boost boost-spirit-qi