2011-05-11 23 views
1

私はこの小さなコードをboostドキュメントからコンパイルしようとしています: (http://www.boost.org/doc/libs/1_46_1/libs/iostreams/doc/チュートリアル/ filter_usage.html)C++ Boostライブラリをリンクできません

#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 
} 

しかし、それはコンパイルすることを拒否し、私は、次のエラーを取得:

グラム++ -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 /含む/ Qt4を/ QtCore -I/USR /含む/ Qt4を/ QtGui -Iは/ usr// Qt4を-Iが挙げられます。 -I ../ teste -I。 -o main.o ../teste/main.cpp

../teste/main.cpp:機能において 'メインINT()':

../teste/main.cpp:9。 25:エラー: '圧縮機'

../teste/main.cpp:10:29このスコープ内で宣言されなかったエラー: 'base64_encoder' をこの範囲

../teste/で宣言されていませんでしたmain.cppに:11:37:ERROR:「file_sinkは」このスコープ

私はおそらく愚かな何かをやっている知っているが、私は何を見ることができないで宣言されていませんでした...

編集:

ところで、私はすべてのブーストライブラリと-devファイルが正しくインストールされています。私の.PROファイルがそうのように見えるので、私は、QT-クリエーターを使用しています:

SOURCES += \ 
    main.cpp 

LIBS += \ 
    -lboost_filesystem \ 
    -lboost_iostreams 

答えて

5

私はあなたが

http://www.boost.org/doc/libs/1_46_1/libs/iostreams/doc/tutorial/filter_usage.html

で例に参照のうえされていると仮定し、あなたが慎重に読めば、あなたがしますチュートリアルページにそのことが記載されていることに注意してください。

If you have appropriate OutputFilters compressor and base64_encoder, you can do this as follows

このページのコードはコンパイルできません。

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); 
} 
+0

私は得ることはありません... – bardes

+0

うわー、今私が参照してください!私は が、私はそれはおそらく、あなたの注意のために愚かな何か、ありがとうと言ったコンプレッサー()とbase64_encoder()された実際の機能を:)と思いました。素晴らしい – bardes

+0

は、この非コンパイルサンプルコードはコンパイルされません理由を把握しようと、さまざまな方法でブーストを再コンパイル2日無駄にしました。 –

0

例は、それだけで使用法を示して完成されていませんio :: filtering_ostreamの出力です。コンプレッサ()のために必要なコードを宣言していないか含んでいないので有効ではありません。 base64_encoder関数とfile_sink関数です。それが何を意味するのか

関連する問題