Вызов zlib (код C) из файла C ++

0

У меня есть файл .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? Но тогда я бы предположил, что у меня такая же проблема.

  • 1
    Вы gzopen(compressed_file_path, "rb"); std :: string в gzopen(compressed_file_path, "rb"); , gzopen не может взять std::string . Используйте .c_str() .
  • 0
    Ааааа .... ты прав! Что объясняет его.
Показать ещё 1 комментарий
Теги:

2 ответа

2
Лучший ответ

Используйте .c_str() при передаче std::string в функции, которые ожидают char *.

-2

здесь есть две вещи...

  1. Включение времени включения заголовка C в файле C++
  2. Связывание C скомпилированной библиотеки lib (zlib) с программой C++

для первой проблемы ваш компилятор не может видеть объявление 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> 
}
  • 1
    Вы никогда не должны переопределять версии zlib.
  • 0
    спасибо, я только что понял, что это большая ошибка .. исправил мой ответ !! благодарю вас
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню