повысить проблему ZLIB - PullRequest
       17

повысить проблему ZLIB

1 голос
/ 21 марта 2011

У меня проблема с библиотеками zlib в boost под VS 2010. Я собрал библиотеки и сгенерировал соответствующие dll / libs в папке boost / stage / lib.Я добавил .dll в папку отладки моих программ и связал ее с соответствующим .lib.

Но у меня возникают проблемы, когда я на самом деле пытаюсь использовать потоки zlib.Вот пример:

#include <cstring>
#include <string>
#include <iostream>
#include <boost\iostreams\filter\gzip.hpp>
#include <boost\iostreams\filtering_streambuf.hpp>
#include <boost\iostreams\copy.hpp>
std::string DecompressString(const std::string &compressedString)
{
    boost::iostreams::filtering_streambuf<boost::iostreams::input> in;
    in.push(boost::iostreams::zlib_decompressor());
    in.push(compressedString);
    std::string retString = "";

    copy(in, retString);
    return retString;
}



when I try to compile thise though, I get multiple errors including:
error C2039: 'char_type' : is not a member of 'std::basic_string<_Elem,_Traits,_Ax>'    c:\program files (x86)\boost\boost_1_46_0\boost\iostreams\traits.hpp
error C2208: 'boost::type' : no members defined using this type c:\program files (x86)\boost\boost_1_46_0\boost\iostreams\traits.hpp
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   c:\program files (x86)\boost\boost_1_46_0\boost\iostreams\traits.hpp

Если я изменю свой код на следующий:

std::string DecompressString(const std::string &compressedString)
{

    boost::iostreams::filtering_streambuf<boost::iostreams::input> in;
    in.push(boost::iostreams::zlib_decompressor());
    std::string retString = "";
    return retString;

}

Он компилируется, что означает, что проблема в in.push для сжатой строки и копии вretString.Я делаю что-то неправильно?Разве мне не разрешено использовать такие строки?

Заранее спасибо

1 Ответ

1 голос
/ 21 марта 2011

Попробуйте:

#include <string>
#include <iostream>
#include <sstream>
#include <boost\iostreams\filter\zlib.hpp>
#include <boost\iostreams\filtering_streambuf.hpp>
#include <boost\iostreams\copy.hpp>

std::string DecompressString(const std::string &compressedString)
{
    std::stringstream src(compressedString);
    boost::iostreams::filtering_streambuf<boost::iostreams::input> in(src);
    std::stringstream dst;
    boost::iostreams::filtering_streambuf<boost::iostreams::output> out(dst);
    in.push(boost::iostreams::zlib_decompressor());

    boost::iostreams::copy(in, out);
    return dst.str();
}

Основная проблема заключается в том, что вы пытаетесь использовать boost::iostreams::copy() для строковых типов, а не для потоковых типов.Кроме того, включение zlib.hpp вместо gzip.hpp, вероятно, также не повредит.

...