问题提升精神已被弃用

use*_*805 1 boost-spirit

我有以下语法:

#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.

我能做什么?

seh*_*ehe 5

应该升级到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"下)

因此,如果更新命名空间引用,则可以继续使用相同的代码.