ошибка компиляции для boost :: iostream :: filtering_streambuf - PullRequest
1 голос
/ 24 октября 2011

Просто пытаюсь сжать строку с помощью bzip2, чтобы я мог отправить ее по каналу с помощью ReadFile.

Следующая строка дает мне следующую ошибку компиляции.

in.push (uncompressed_string);

Ошибка 6, ошибка C2027: использование неопределенного типа 'boost :: STATIC_ASSERTION_FAILURE' c: \ program files (x86) \ boost \ boost_1_47 \ boost \ iostreams \ chain.hpp 488 1 Агент

boost::iostreams::filtering_streambuf<boost::iostreams::input> in;
ostringstream uncompressed_string;
ostringstream compressed_string;


uncompressed_string << buf;

in.push(boost::iostreams::bzip2_compressor());
in.push(uncompressed_string);

boost::iostreams::copy(uncompressed_string, compressed_string);

1 Ответ

2 голосов
/ 24 октября 2011

Ошибка произошла из-за добавления потока output в поток фильтрации input в качестве его устройства.

#include <sstream>
#include <string>
//#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/filter/bzip2.hpp>
#include <boost/iostreams/copy.hpp>
int main()
{
    std::string buf =  "this is a test\n";

    //boost::iostreams::filtering_istream in; // I think this is simpler
    boost::iostreams::filtering_streambuf<boost::iostreams::input> in;
    in.push(boost::iostreams::bzip2_compressor());
    std::istringstream uncompressed_string(buf);
    // in.push(boost::make_iterator_range(buf)); // another option
    in.push(uncompressed_string);
    std::ostringstream compressed_string;
    boost::iostreams::copy(in, compressed_string);

    std::cout << compressed_string.str();
}

протестировано с gcc 4.6.1 и boost1,46

~ $ ./test | bzcat
this is a test
...