2011-10-10 9 views
5

Estoy intentando compilar ejemplo de Boost página de filtros Gzip:Boost filtros Gzip: compilar 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); 
} 

Por desgracia mi g ++ devuelve errores:

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 

Qué le pasa a esta función y cómo modificarlo para que funcione? ¡Muchas gracias!

Enlace de alzar filtros Gzip: http://www.boost.org/doc/libs/release/libs/iostreams/doc/classes/gzip.html

Respuesta

8

El problema es que no especifica el espacio de nombres en el que mirar hacia arriba filtering_streambuf, input o gzip_decompressor. Probar:

#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 razón por la que el example no hace esto es debido a la convención establecida en el introduction:

todas las clases, funciones y plantillas introducidas en la documentación están en el espacio de nombres boost :: iostreams, a menos que se indique lo contrario. La calificación del espacio de nombres generalmente se omite.

+0

Hay un montón de errores, así que he puesto la salida en pastebin. ¿Puede ser que mi Boost funcione incorrectamente? http://pastebin.com/fG2ZqpaJ – ghostmansd

+0

@ghostmansd: Como se menciona [aquí] (http://www.boost.org/doc/libs/release/libs/iostreams/doc/classes/gzip.html#installation), necesitas vincular a 'zlib' para que esto funcione. 'zlib' es externo a' boost', pero generalmente está preinstalado en sistemas UNIX, y puede descargarse desde [aquí] (http://zlib.net/). – Mankarse

+0

Compilo usando -lz, pero no ayuda. – ghostmansd