1

只是想用 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 Agent

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);
4

1 回答 1

2

该错误是由于将输出流作为其设备推入输入过滤流。

#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 和 boost 1.46 测试

~ $ ./test | bzcat
this is a test
于 2011-10-24T19:24:48.800 回答