4

编码:

typedef std::string::const_iterator iterator;
namespace parsers
{
    namespace spirit = ::boost::spirit;
    namespace ascii = ::boost::spirit::ascii;
    namespace phoenix = ::boost::phoenix;
    spirit::qi::rule< iterator, void(std::string), ascii::space_type > action_parser = 
        '"'
        > spirit::qi::lit("action")
        > spirit::qi::labels::_r1
        > '"';
}

错误:

> 1>CL : warning : This header is deprecated. Please use:
> boost/spirit/include/classic.hpp
> 1>D:\CPP\boost\boost_1_53_0\boost_1_53_0\boost/spirit/home/support/iterators/multi_pass_fwd.hpp(59):
> error C2976: 'boost::spirit::multi_pass' : too few template arguments
> 1>D:\CPP\boost\boost_1_53_0\boost_1_53_0\boost/spirit/home/support/iterators/multi_pass_fwd.hpp(86):
> error C3203: 'multi_pass' : unspecialized class template can't be used
> as a template argument for template parameter 'Iterator', expected a
> real type
> 1>D:\CPP\boost\boost_1_53_0\boost_1_53_0\boost/spirit/home/support/iterators/multi_pass_fwd.hpp(86):
> error C2955: 'boost::spirit::multi_pass' : use of class template
> requires template argument list
> 1>D:\CPP\boost\boost_1_53_0\boost_1_53_0\boost/spirit/home/support/iterators/multi_pass_fwd.hpp(86):
> error C2977: 'boost::spirit::traits::is_multi_pass' : too many
> template arguments
> 1>D:\CPP\boost\boost_1_53_0\boost_1_53_0\boost/spirit/home/support/iterators/multi_pass.hpp(183):
> error C2976: 'boost::spirit::multi_pass' : too few template arguments
> 1>D:\CPP\boost\boost_1_53_0\boost_1_53_0\boost/spirit/home/support/iterators/istream_iterator.hpp(37):
> error C2955: 'boost::spirit::multi_pass' : use of class template
> requires template argument list
4

2 回答 2

2

问:我删除了 boost/spirit.hpp 包含。为什么是这个原因?PS Thx 到 ForReVer

A.:这是因为

CL:警告:此标头已弃用。请使用:
> boost/spirit/include/classic.hpp

换句话说:它告诉你确切的原因。这转化为正常生活“只是因为”。

现在谈谈为什么开发人员会弃用旧标头:

维基百科弃用

弃用是应用于计算机软件功能、特性或实践的状态,表明它应该被避免,通常是因为被取代

你有它:“通常是因为被取代”。在这种情况下,SpiritV2 在 2009 年左右取代了 SpiritV1(?)。这就是文档所说的:

精神经典

Spirit V1.8.x 代码库已与 Spirit V2 集成。它现在被称为 Spirit.Classic。由于目录结构已更改(Spirit Classic 标头现在移至 $BOOST_ROOT/boost/spirit/home/classic 目录),我们创建了转发标头,允许现有应用程序在不进行任何更改的情况下进行编译。

但是,这些转发标头已被弃用,这将导致为从 Boost V1.38 开始的每个标头生成相应的警告。预计将来会删除转发标头。

现在推荐使用 Spirit Classic 的方法是包含目录 $BOOST_ROOT/boost/spirit/include 中的头文件。此目录中的所有 Spirit Classic 标头都在其名称前添加了“classic_”。

总而言之,它只是意味着:Spirit Classic 已经过时了。不要使用它。

如果您继承了 Spirit V1 解析器并需要有关迁移到 Spirit V2 的指导:

注意:正如我们所说,SpiritX3 已经在开发中。看这里

于 2013-06-18T15:25:21.913 回答
0

我删除了 boost/spirit.hpp 包含。为什么是这个原因?

礼貌永远

于 2013-06-18T10:04:18.303 回答