我有以下语法:
#include <boost/spirit.hpp>
struct point_grammar
: public boost::spirit::grammar<point_grammar>
{
template <typename Scanner>
struct definition
{
boost::spirit::rule<Scanner> E, S, V;
definition(const point_grammar &self)
{
using namespace boost::spirit;
E = S >> V;
S = '@' >> +(~ch_p('@') - V);
V = str_p(".PV@") | str_p(".CV@");
}
const boost::spirit::rule<Scanner> &start()
{
return E;
}
};
};
Run Code Online (Sandbox Code Playgroud)
编译时,编译器显示以下警告:
/usr/include/boost/spirit.hpp:18:4:警告:"此标头已弃用.请使用:boost/spirit/include/classic.hpp"
但是当改变#include for boost/spirit/include/classic.hpp时,我有以下错误:
(在'<'标记之前的预期模板名称)在以下行中::: public boost :: spirit :: grammar.
我能做什么?
你应该升级到Spirit V2.我实际上向你展示了如何在" 语法问题 "中做到这一点:)
严重.Boost 1_36于2008年8月14日发布.
现在,文档(http://boost-spirit.com/home/doc/)解释
为了避免命名空间与新的Spirit V2库冲突,我们将Spirit Classic移动到命名空间中
boost::spirit::classic.一旦如上所述纠正标题名称,就需要调整对前命名空间boost :: spirit的所有引用.作为替代方案,您可以定义预处理器常量BOOST_SPIRIT_USE_OLD_NAMESPACE,这将强制Spirit Classic代码boost::spirit像以前一样位于命名空间中.但不建议这样做,因为它可能会导致命名冲突.
(源页面:http://www.boost.org/doc/libs/1_55_0/libs/spirit/doc/html/spirit/what_s_new.html "Classic"下)
因此,如果更新命名空间引用,则可以继续使用相同的代码.