我正在尝试从boost文档中编译这一小段代码: (http://www.boost.org/doc/libs/1_46_1/libs/iostreams/doc/tutorial/filter_usage.html)
#include <boost/iostreams/device/file_descriptor.hpp>
#include <boost/iostreams/filtering_stream.hpp>
namespace io = boost::iostreams;
int main()
{
io::filtering_ostream out;
out.push(compressor());
out.push(base64_encoder());
out.push(file_sink("my_file.txt"));
// write to out using std::ostream interface
}
但是它拒绝编译,我得到以下错误:
g ++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I / usr / share / qt4 / mkspecs / linux-g ++ -I ../ teste -I / usr / include / qt4 / QtCore -I / usr / include / qt4 / QtGui -I / usr / include / qt4 -I。 -I ../ teste -I。 -o main.o ../ teste / main.cpp
../ teste / main.cpp:在函数'int main()'中:
../ teste / main.cpp:9:25:错误:'压缩器'未在此范围内声明
../ teste / main.cpp:10:29:错误:'base64_encoder'未在此范围内声明
../ teste / main.cpp:11:37:错误:'file_sink'未在此范围内声明
我知道我可能做了一些愚蠢的事情,但我看不出是什么......
编辑:
顺便说一下,我已经正确安装了所有的库和-dev文件。我正在使用QT-Creator,所以我的.pro文件看起来像这样:SOURCES += \
main.cpp
LIBS += \
-lboost_filesystem \
-lboost_iostreams
答案 0 :(得分:5)
我假设您正在参考
中的示例http://www.boost.org/doc/libs/1_46_1/libs/iostreams/doc/tutorial/filter_usage.html
如果您仔细阅读,您会注意到教程页面指出
如果您有合适的OutputFilters 压缩器和base64_encoder,你可以 按以下步骤执行此操作
此示例页面上的代码无法编译。请尝试此示例:
http://www.boost.org/doc/libs/1_46_1/libs/iostreams/doc/classes/zlib.html#examples
...但请务必添加另一个using namespace boost::iostreams
以便能够编译它,即:
#include <fstream>
#include <iostream>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/zlib.hpp>
int main()
{
using namespace std;
using namespace boost::iostreams;
ifstream file("hello.z", ios_base::in | ios_base::binary);
filtering_streambuf<input> in;
in.push(zlib_decompressor());
in.push(file);
boost::iostreams::copy(in, cout);
}
答案 1 :(得分:0)
示例未完成它只显示了io :: filtering_ostream out的用法;但它无效,因为它没有声明或包括压缩机的必要代码(); base64_encoder和file_sink函数。