Boost Gzip фильтры: компиляция файлов - PullRequest
5 голосов
/ 10 октября 2011

Я пытаюсь скомпилировать пример со страницы фильтров Boost Gzip:

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

К сожалению, мой g ++ возвращает ошибки:

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

Что не так с этой функцией и как ее изменитьзаставить это работать?Большое спасибо!

Ссылка на фильтры Boost Gzip: http://www.boost.org/doc/libs/release/libs/iostreams/doc/classes/gzip.html

1 Ответ

8 голосов
/ 10 октября 2011

Проблема в том, что вы не указываете пространство имен для поиска filtering_streambuf, input или gzip_decompressor.Попробуйте:

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

Причина, по которой пример не делает этого, заключается в соглашении, установленном во введении :

Все классы, функции и шаблоны, представленные в документации, находятся в пространстве имен boost :: iostreams, если не указано иное.Квалификация пространства имен обычно опускается.

...