首先,抱歉标题不准确,只是我实际上并不知道什么导致编译错误(我是精神/凤凰/元组的新手),因此为了我的问题的可读性,我将整个语法导出到引擎收录: http://pastebin.com/RsGM8E4r
代码在Visual Studio 2010中编译为:
Iterator = std::string::const_iterator
以及在底部理解语法和问题所需的其他信息:
namespace parser { namespace container1 {
template < typename _C >
class atom : public element < _C >
{
private:
typedef typename std::basic_string < _C > _string;
public:
explicit atom ( const boost::variant < bool, long, double, _string > & value )
: _value ( value )
{
_element_type = TY_ATOM;
}
explicit atom ()
{
}
template < typename T >
const T as () const
{
return boost::apply_visitor ( atom_visitor < _C, T > (), _value );
}
private:
boost::variant < bool, long, double, _string > _value;
};
template < typename _C >
struct item
{
typedef typename element < _C > type;
typedef typename boost::shared_ptr < type > ptr;
};
}}
group and list也有元素作为基础。
现在,我不明白的是,当你看语法时,原子的规则定义是:
atom =
( qi::double_ | qi::long_ | qi::bool_ | string ) [ qi::_val = phoenix::construct < _item_ptr > ( phoenix::new_ < _atom > ( qi::_1 ) ) ]
;
这给出了一个很长的编译器错误列表,我无法理解这一点。再次导出到pastebin:http://pastebin.com/k4HseJ01
但是,如果我将规则更改为
atom =
( qi::double_ | qi::long_ | qi::bool_ | string ) [ qi::_val = phoenix::construct < _item_ptr > ( phoenix::new_ < _atom > () ) ]
;
它成功编译,但我需要从该规则中获取解析数据:P
非常感谢您提前寻求任何帮助,我真的坚持了好几天。