2014-05-10 2 views
1

정말 오래된 코드를 포팅/업데이트 중이며 C++이 매우 선명하지 않습니다. (대부분 C 프로그래머입니다). 이 오류가 발생했습니다. 문제를 해결하고 누군가이 문제를 설명 할 수 있습니까? 주석 행 512는 구조체 정의입니다 - 첫 번째 줄?클래스/구조체 정의 오류

In file included from src/aaa_dict_mngr.cxx:38:0: 
./include/aaa_parser_avpvalue.h:512:41: error: expected template-name before '<' token 
./include/aaa_parser_avpvalue.h:512:41: error: expected '{' before '<' token 
./include/aaa_parser_avpvalue.h:512:41: error: expected unqualified-id before '<' token 

잘못된 코드 :

struct DiamidentGrammar : public grammar<DiamidentGrammar> 
{ 
    template <typename ScannerT> 
    struct definition 
    { 
    definition(DiamidentGrammar const& self) 
    { 
     diameterIdentity = realm; 
     realm = label >> *('.' >> label); // No recursive rule allowed. 
     label = diameterName | diameterDname; 
     diameterName = alpha_p >> *(alnum_p | '-'); 
     diameterDname = digit_p >> +(alnum_p | '-'); 
    } 
    rule<ScannerT> diameterIdentity, realm, label, diameterName, diameterDname; 
    rule<ScannerT> const& start() const { return diameterIdentity; } 
    }; 
}; 
+1

'grammar <> class 템플릿이 정의 된 헤더를 포함하지 않은 것처럼 보입니다. – dasblinkenlight

+0

#include 가 포함되어 있지만 같은 오류가 있습니다. – mcdoomington

+0

@KerrekSB 그냥 헤드 업할 것입니다. 다른 사람들과 함께 잘못 생각한 것 같습니다. TBC ...) – sehe

답변

1

이 단지 고대의 성령 코드입니다.

이 그것을 Live On Coliru

아를 참조하고 반드시 업그레이드 : 당신은 고전적인 헤더/네임 스페이스를 사용합니다! Spirit V2는 오래되었고 SpiritX3은 구석에 있습니다.

#include <boost/spirit/include/classic.hpp> 

using namespace boost::spirit::classic; 

struct DiamidentGrammar : public grammar<DiamidentGrammar> 
{ 
    template <typename ScannerT> 
     struct definition 
     { 
      definition(DiamidentGrammar const& self) 
      { 
       diameterIdentity = realm; 
       realm = label >> *('.' >> label); // No recursive rule allowed. 
       label = diameterName | diameterDname; 
       diameterName = alpha_p >> *(alnum_p | '-'); 
       diameterDname = digit_p >> +(alnum_p | '-'); 
      } 
      rule<ScannerT> diameterIdentity, realm, label, diameterName, diameterDname; 
      rule<ScannerT> const& start() const { return diameterIdentity; } 
     }; 
}; 

int main() 
{ 
} 
+0

틀리지 마세요! ㅎ ... 음 아주 아주 오래된 응용 프로그램입니다 - opendiameter;) – mcdoomington

+0

FWIW : 현대 SpiritV2에서의 모습입니다. http://coliru.stacked-crooked.com/a/994216f654653b87 – sehe