У меня есть файл .cpp
который содержит следующую функцию для распаковки файла через zlib
:
#include <zlib.h>
#include <fstream>
bool gzip_uncompress(std::string &compressed_file_path,std::string &uncompressed_file_path)
{
char outbuffer[1024*16];
gzFile infile = (gzFile)gzopen(compressed_file_path, "rb");
FILE *outfile = fopen(uncompressed_file_path, "wb");
gzrewind(infile);
while(!gzeof(infile))
{
int len = gzread(infile, outbuffer, sizeof(outbuffer));
fwrite(outbuffer, 1, len, outfile);
}
fclose(outfile);
gzclose(infile);
return true;
}
Похоже, он должен работать со мной, но я получаю ошибки во время компиляции:
No matching function call to 'gzopen'
а также
No matching function call to 'fopen'
Единственное, что я могу сказать, это то, что я C++
файле C++
, а zlib
- это C
библиотека. Однако я не уверен в ошибке fopen
.
Кто-нибудь видит, как я могу назвать эти функции и обойти ошибку компиляции?
Я также попробовал:
extern "C" {
#include <zlib.h>
}
но до сих пор нет. Я лаяю неправильное дерево? Должен ли я переместить эту функцию в файл C
? Но тогда я бы предположил, что у меня такая же проблема.
Используйте .c_str()
при передаче std::string
в функции, которые ожидают char *
.
здесь есть две вещи...
для первой проблемы ваш компилятор не может видеть объявление gzopen, может быть много причин для этого.
пожалуйста, проверьте декларацию функций gzopen в zlib.h
Убедитесь, что вам нужно включить путь к zlib.h в аргументы g++ ex: -I/usr/local/include/zlib.h
Следуйте приведенной ниже ссылке для документации разработчика http://www.zlib.net/manual.html Пожалуйста, следуйте поправке
Для 2. Связывание вашей C++ программы с zlib, пожалуйста, используйте
extern "C" {
#include <zlib.h>
}
gzopen(compressed_file_path, "rb");
std :: string вgzopen(compressed_file_path, "rb");
, gzopen не может взятьstd::string
. Используйте.c_str()
.