我有以下语法:
#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;
}
};
};
编译时,编译器会显示以下警告:
/usr/include/boost/spirit.hpp:18:4:警告:“此标题是 弃用。请使用:boost / spirit / include / classic.hpp“
但是当改变#include for boost / spirit / include / classic.hpp时,我有以下错误:
('&lt;'标记之前的预期模板名称)在以下行中: public boost :: spirit :: grammar。
我能做什么?
答案 0 :(得分:5)
您应该升级到Spirit V2。我实际上已经告诉你如何在&#34; Problems with grammar&#34; :)
严重。 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&#34; Classic&#34;)
因此,如果更新命名空间引用,可以继续使用相同的代码。