所以我对Boost很新,但是我在尝试在vs2010的win32应用程序项目中做一些最基本的事情时遇到了问题。
我已经进入了我的vs2010项目属性,并确保我的包含文件正在查找正确的位置,并且当我构建时,我不会在stdafx.h中获取包括来自boost的hpp文件的错误,但是当我读到他们网站上的文档: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;
我在同一页面上找到了一个替代解决方案,其中std :: basic_istream_iterator实际上是一个转发运算符,但是当我编译时,我得到一个错误,指出basic_istream_iterator不是std库的一部分。
最后,我对迭代器本身并不感兴趣。我想知道如何将我的输入迭代器转换为前向迭代器,以便我可以通过文件进行迭代。
答案 0 :(得分:3)
与评论者说的一样,您需要包含正确的支持标题。
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/support_multi_pass.hpp>
然而,最简单的方法是:
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);