У меня проблема с библиотеками zlib в boost под VS 2010. Я собрал библиотеки, и в папке boost/stage/lib были сгенерированы соответствующие dll/libs. Я добавил .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. Я делаю что-то неправильно? Разве мне не разрешено использовать такие строки?
заранее спасибо
char_type
наверняка должен быть членомstd::basic_string<_Elem, _Traits, _ax>
. Ошибки, которые вы получаете, по-видимому, связаны с неправильным объявлением типаin
. К сожалению, у меня недостаточно опыта работы с Boost.Iostreams, чтобы сказать, как его следует объявлять, и мне придется оставить это другому комментатору. Я считаю, что интерфейс, предоставленный zlib, достаточно прост для работы сам по себе. - person Max Lybbert   schedule 21.03.2011