2013-06-18 1 views
4

코드 1.53 multi_pass 반복자 관련 컴파일 오류 :부스트 :: 정신

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 
+0

적절한 경우 템플릿 인수의 개수가 적절하고 오류가 발생하는 이유를 이해하지 못한다고 생각하십니까? – ChiefTwoPencils

+0

[C2976] (http://msdn.microsoft.com/en-us/library/1t1kaz6a.aspx), [C3203] (http://msdn.microsoft.com/en-us/library/606k9xxc (v = vs.80) .aspx),보다 일반적으로 [Build Errors] (http://msdn.microsoft.com/en-us/library/8x5x43k7 (v = vs80) .aspx)가 도움이 될 것입니다. – ChiefTwoPencils

+0

공식적인 예가 있습니다 : http://www.boost.org/doc/libs/1_53_0/libs/spirit/doc/html/spirit/qi/tutorials/mini_xml___asts_.html. 예, 규칙에 제공된 템플리트 인수는 예제에 따라 정확합니다. – John

답변

0

나는 부스트/spirit.hpp의 포함을 제거했습니다. 이유는 무엇입니까?

의례 영원히

+0

질문에 답변했습니다. – sehe

2

Q : 나는 부스트/spirit.hpp의 포함을 제거했습니다. 이유가 무엇 이었습니까? 추신 경고 :이 헤더가 사용되지 않습니다

CL이 때문에 들으 영원히

: 그것은 이유 하였다. 사용하십시오 :
> 부스트/정신/즉/classic.hpp에게

을 포함한다 : 정확히 이유를 말했다. 그리고 이것은 평범한 삶으로 "단지"로 번역됩니다. 개발자가 된 헤더 중단 한 이유에 지금

:

위키 백과 Deprecation

중단 컴퓨터 소프트웨어 기능에 적용되는 상태이며, 특성, 또는 관행은 피해야한다 나타내는 , 일반적으로 대체되기 때문에 대체합니다.

그것 : "대체되기 때문에 전형적으로". 이 경우 SpiritV2는 2009 년경 SpiritV1을 대체합니다 (?). 이 문서는 그것에 대해 말씀입니다 :

Spirit Classic

성령 V1.8.x 코드베이스는 성령 V2와 통합되었습니다. 그것은 이제 Spirit.Classic이라고 불립니다. 디렉토리 구조가 변경되었으므로 (Spirit 클래식 헤더가 $ BOOST_ROOT/boost/spirit/home/classic 디렉토리로 이동 되었기 때문에) 기존 헤더 파일을 변경하지 않고 컴파일 할 수 있도록 전달 헤더를 만들었습니다.

그러나 이러한 전달 헤더는 더 이상 사용되지 않으므로 Boost V1.38부터 시작하는 각 헤더에 대해 해당 경고가 생성됩니다. 앞으로 전달 헤더가 제거 될 것으로 예상됩니다.

이제 Spirit Classic을 사용하는 권장 방법은 $ BOOST_ROOT/boost/spirit/include 디렉토리의 헤더 파일을 포함하는 것입니다. 이 디렉토리의 모든 Spirit Classic 헤더에는 이름 앞에 'classic_'이라는 접두어가 붙습니다.

모두로, Spirit Classic은 오래된 것입니다.사용하지 마십시오.

당신은 성령 V1 파서 상속과 성령 V2로 마이그레이션에 대한 지침을 필요로 한 경우

:

참고 : 우리가 말하는 SpiritX3가 개발 중에 이미. here