저는 Boost.Qi 초보자입니다. 그래서 간단한 예제를 사용하여 주위를 둘러 보려고 노력하고 있습니다. 다음과 같은 문자열을 파싱하려고합니다.선택 파서가있는 Boost.Qi 컴파일러 오류
A:1 B:2 C:3
문자열의 각 구성 요소 사이에 임의의 양의 공백이 있습니다. A:
부분 등이 고정되어 있으며 정수 값을 파싱하고 싶습니다. 위의 예에서 문자열의 세 번째 구성 요소 인 C:3
은 선택 사항입니다. 나는이 응용 프로그램에 대한 Boost.Qi을 테스트하기 위해 다음과 같은 간단한 예를 내놓았다 :
#include <boost/optional.hpp>
#include <boost/spirit/include/qi.hpp>
#include <iostream>
namespace qi = boost::spirit::qi;
int main()
{
std::string s = "A:1 B:2 C:3";
int a, b;
boost::optional<int> c;
if (!qi::parse(s.begin(), s.end(),
qi::lit("A:") >> qi::int_ >> +qi::space >> "B:" >> qi::int_ >>
-(+qi::space >> "C:" >> qi::int_), a, b, c))
{
std::cout << "failed to parse" << std::endl;
}
std::cout << a << ' ' << b << ' ' << c.value_or(-1) << std::endl;
}
그러나,이 (부스트 v1.58와 g ++ 5.4.0 C++ (11) 모드에서 사용) 컴파일에 실패.
spirit.cc:15:55: required from here
/usr/include/boost/spirit/home/support/container.hpp:130:12: error: ‘int’ is not a class, struct, or union type
struct container_value
및
spirit.cc:15:55: required from here
/usr/include/boost/spirit/home/qi/detail/pass_container.hpp:316:66: error: no type named ‘type’ in ‘struct boost::spirit::traits::container_value<int, void>’
typedef typename traits::container_value<Attr>::type value_type;
^
/usr/include/boost/spirit/home/qi/detail/pass_container.hpp:329:15: error: no type named ‘type’ in ‘struct boost::spirit::traits::container_value<int, void>’
내가 잘못 여기서 뭘하는지 누구에게도 분명 그 것이다 : C++ 템플릿 오류 메시지의 전형적인 바다에서 나는 다음과 같은 발견?
난 당신이 http://www.boost.org/doc/libs/1_60_0/libs/spirit/doc (명시 적으로 [생략]에 필요가 있다고 생각 /html/spirit/qi/reference/directive/omit.html) 두 속성 모두에 관심이 없기 때문에'+ qi :: space'가 발생합니다. –