2011-10-10 13 views
5

sto cercando di compilare esempio dalla Boost pagina filtri Gzip:Boost filtri Gzip: compilare failes

#include <fstream> 
#include <iostream> 
#include <boost/iostreams/filtering_streambuf.hpp> 
#include <boost/iostreams/copy.hpp> 
#include <boost/iostreams/filter/gzip.hpp> 

int main() 
{ 
    using namespace std; 

    ifstream file("hello.gz", ios_base::in | ios_base::binary); 
    filtering_streambuf<input> in; 
    in.push(gzip_decompressor()); 
    in.push(file); 
    boost::iostreams::copy(in, cout); 
} 

Purtroppo il mio g ++ restituisce gli errori:

gzlib.cpp: In function ‘int main()’: 
gzlib.cpp:12:3: error: ‘filtering_streambuf’ was not declared in this scope 
gzlib.cpp:12:23: error: ‘input’ was not declared in this scope 
gzlib.cpp:12:30: error: ‘in’ was not declared in this scope 
gzlib.cpp:13:29: error: ‘gzip_decompressor’ was not declared in this scope 

Cosa c'è di sbagliato con questa funzione e come modificarlo per farlo funzionare? Molte grazie!

Link Boost filtri Gzip: http://www.boost.org/doc/libs/release/libs/iostreams/doc/classes/gzip.html

risposta

8

Il problema è che non si specifica lo spazio dei nomi in cui per cercare filtering_streambuf, input o gzip_decompressor. Prova:

#include <fstream> 
#include <iostream> 
#include <boost/iostreams/filtering_streambuf.hpp> 
#include <boost/iostreams/copy.hpp> 
#include <boost/iostreams/filter/gzip.hpp> 

int main() 
{ 
    using namespace std; 
    using namespace boost::iostreams; 
    ifstream file("hello.gz", ios_base::in | ios_base::binary); 
    filtering_streambuf<input> in; 
    in.push(gzip_decompressor()); 
    in.push(file); 
    copy(in, cout); 
} 

La ragione per cui il example non fare questo è a causa della convenzione stabilita nel introduction:

Tutte le classi, funzioni e modelli introdotti nella documentazione sono in il boost del namespace :: iostreams, se non diversamente indicato. La qualifica dello spazio dei nomi viene generalmente omessa.

+0

C'è un sacco di errori, quindi ho messo l'output su pastebin. Il mio Boost potrebbe funzionare in modo errato? http://pastebin.com/fG2ZqpaJ – ghostmansd

+0

@ghostmansd: come accennato [qui] (http://www.boost.org/doc/libs/release/libs/iostreams/doc/classes/gzip.html#installation), è necessario collegare a 'zlib' affinché funzioni. 'zlib' è esterno a' boost', ma di solito è preinstallato su sistemi UNIX, e può essere altrimenti scaricato da [qui] (http://zlib.net/). – Mankarse

+0

Io compilo usando -lz, ma non aiuta. – ghostmansd