2014-01-03 1 views
3

Так что я очень новичок в Boost, но у меня возникают проблемы с попытками сделать некоторые из самых простых вещей в моем проекте приложений win32 в vs2010.C++ Spirit Boost: создание итератора ввода в прямом итераторе

Я зашел в мои свойства проекта vs2010 и удостоверился, что мои включенные файлы ищут нужные места, а когда я строю, я не получаю ошибок, включая hpp-файлы от boost в моем stdafx.h, однако, когда я прочитайте документацию на своем сайте здесь: http://www.boost.org/doc/libs/1_43_0/libs/spirit/doc/html/spirit/support/multi_pass.html Я просто получаю кучу основных ошибок, таких как multi_pass, не определено.

Мне нужно только повысить значение для одной вещи, а это значит, что я создаю оператор прямой из текущего оператора ввода, чтобы передать его через функцию. Ниже приведена декларация для моего оператора ввода.

std::istreambuf_iterator<char> eof; 

я нашел альтернативное решение на той же странице, где станд :: basic_istream_iterator является фактически вперед оператор, но когда я компилирую, я получаю сообщение об ошибке сказав, что basic_istream_iterator не является частью библиотеки станд.

В конце концов, я просто совершенно новый для самих итераторов. Я хотел бы знать, как я могу заставить свой входной итератор преобразовываться в форвардный итератор, чтобы я мог выполнять итератор через файл.

+1

Там нет 'STD :: basic_istream_iterator'; есть 'std :: istream_iterator'. – 0x499602D2

+2

Если 'multi_pass' не определено, вы не включаете правильные заголовки. Вы следовали ссылке «полный исходный код» на странице документации multi_pass, указанной в вашем вопросе, т. Е. Http://www.boost.org/doc/libs/1_43_0/libs/spirit/example/support/multi_pass.cpp? Убедитесь, что вы включили заголовки, перечисленные там. Из любопытства вы говорите, что хотите переслать итератор, чтобы вы могли «передать его через функцию», а «итератор через файл» - это функция стандартной библиотеки, с которой вы хотите ее использовать? Который из? Почему недостаточно ввода-итератора? (есть веские причины) –

+0

Спасибо, Тони, да, я использую его для функции поиска в , которая принимает итераторы вперед для первого и второго параметров. –

ответ

3

Как комментатор siad, вам нужно включить правильные заголовки поддержки.

#include <boost/spirit/include/qi.hpp> 
#include <boost/spirit/include/support_multi_pass.hpp> 

Howeever, самый простой способ:

std::ifstream file("myfile.txt", std::ios::binary); 
file.unsetf(std::ios::skipws); 

// use the ready-made: 

boost::spirit::istream_iterator f(file), l; 

// parse! 
book ok = qi::parse(f, l, my_grammar); 
+0

Спасибо, ты! –

 Смежные вопросы

  • Нет связанных вопросов^_^