2014-01-29 4 views
1

나는 다음과 같은 문법이 : 내가 컴파일 할 때문제는 정신이되지 않습니다 향상

#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("[email protected]") | str_p("[email protected]"); 
     } 

     const boost::spirit::rule<Scanner> &start() 
        { 
     return E; 
        } 
    }; 
}; 

이 컴파일러는 나에게 다음과 같은 경고 표시를 :

/usr/include/boost/spirit.hpp:18:4: warning: "This header is deprecated. Please use: boost/spirit/include/classic.hpp"

그러나 때 변화 부스트/정신에 대한 사용법 #include /include/classic.hpp, 다음 오류가 있습니다 :

(expected template-name before ‘<’ token) in the line where is: : public boost::spirit::grammar.

내가 할 수있는 일은 무엇입니까?

답변

5

은 Spirit V2로 업그레이드해야합니다. 실제로 "Problems with grammar"에서이 작업을 수행하는 방법을 보여주었습니다.
진지하게. 부스트 1_36은 2008 년 8 월 14 일에으로 발매되었습니다.

이제, 문서 (http://boost-spirit.com/home/doc/는)

To avoid namespace conflicts with the new Spirit V2 library we moved Spirit Classic into the namespace boost::spirit::classic . All references to the former namespace boost::spirit need to be adjusted as soon as the header names are corrected as described above. As an alternative you can define the preprocessor constant BOOST_SPIRIT_USE_OLD_NAMESPACE , which will force the Spirit Classic code to be in the namespace boost::spirit as before. This is not recommended, though, as it may result in naming clashes.

(소스 페이지를 "클래식"에서 http://www.boost.org/doc/libs/1_55_0/libs/spirit/doc/html/spirit/what_s_new.html) 설명

그래서, 당신은 당신이를 업데이트 할 경우 동일한 코드를 계속 사용할 수 네임 스페이스 참조.