问题提升精神已被弃用

时间:2014-01-29 14:57:13

标签: 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;
                  }
   };
};

编译时,编译器会显示以下警告:

  

/usr/include/boost/spirit.hpp:18:4:警告:“此标题是   弃用。请使用:boost / spirit / include / classic.hpp“

但是当改变#include for boost / spirit / include / classic.hpp时,我有以下错误:

  

('&lt;'标记之前的预期模板名称)在以下行中:   public boost :: spirit :: grammar。

我能做什么?

1 个答案:

答案 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;)

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