2011-05-11 5 views
1

J'essaie de compiler ce petit morceau de code à partir de la documentation de Boost: (http://www.boost.org/doc/libs/1_46_1/libs/iostreams/doc/ tutorial/filter_usage.html)C++ Impossible de lier la bibliothèque 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 
} 

Mais il refuse de compiler, je reçois les erreurs suivantes:

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: En fonction 'int main()':

../teste/main.cpp:9: 25: erreur: 'compresseur' n'a pas été déclaré dans ce champ d'application

../teste/main.cpp:10:29: error: 'base64_encoder' n'a pas été déclaré dans ce champ d'application

../teste/ main.cpp: 11: 37: erreur: 'file_sink' n'a pas été déclaré dans cette portée

Je sais que je fais probablement quelque chose de stupide mais je ne vois tout simplement pas ce que ...

modifier:

BTW, j'ai toutes les bibliothèques Boost et les fichiers -dev installés correctement. et j'utilise QT-Creator, donc mon fichier .pro ressemble à ceci:

SOURCES += \ 
    main.cpp 

LIBS += \ 
    -lboost_filesystem \ 
    -lboost_iostreams 

Répondre

5

Je suppose que vous faites allusion à l'exemple à

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

Si vous lisez attentivement, vous notez que la page du tutoriel indique que

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

Le code sur cette page d'exemple n'est pas destiné à être compilable. Essayez cet exemple à la place:

http://www.boost.org/doc/libs/1_46_1/libs/iostreams/doc/classes/zlib.html#examples

... mais assurez-vous d'ajouter un autre using namespace boost::iostreams pour être en mesure de le compiler, à savoir:

#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

Je ne comprends pas ce que cela signifie ... – bardes

+0

Wow, maintenant je vois! Je pensais compresseur() et base64_encoder() étaient de vraies fonctions :) J'ai dit que c'était probablement quelque chose de stupide, merci pour votre attention. – bardes

+0

génial, gaspillé 2 jours de recompilation boost de diverses façons en essayant de comprendre pourquoi cet exemple de code non compilable ne compilerait pas. –

0

L'exemple est terminée pas montre à l'utilisation de io :: filtering_ostream out; mais ce n'est pas valable puisque c'est ne pas déclarer ou inclure le code nécessaire pour le compresseur(); fonctions base64_encoder et file_sink.

Questions connexes