ОШИБКА при компиляции библиотеки C ++ Boost iostream - PullRequest
0 голосов
/ 09 марта 2020

Я использую библиотеку наддува для распаковки сжатого файла. Однако, когда я компилирую проект с использованием CMake, я получаю следующую ошибку во время компиляции. Фрагмент, как показано ниже.

Включение каталогов

include <boost/iostreams/filtering_streambuf.hpp>
include <boost/iostreams/copy.hpp>
include <boost/iostreams/filter/gzip.hpp>

Фрагмент кода

  ifstream infile;
  boost::iostreams::filtering_streambuf<boost::iostreams::input> inbuf;
  inbuf.push(boost::iostreams::gzip_decompressor());
  inbuf.push(infile);

CmakeList

g++ Version 4.8.5 & g++ 7.3.1 (Same error with both tries)
Using standard 17
find_package(Boost 1.67.0)
include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(<project-name> ${Boost_LIBRARIES})

Ошибка компиляции

/usr/local/include/boost/iostreams/detail/access_control.hpp: In constructor ‘boost::iostreams::detail::pub_<U>::pub_(V)’:
/usr/local/include/boost/iostreams/detail/access_control.hpp:43:42: error: class ‘boost::iostreams::detail::pub_<U>’ does not have any field named ‘v’
         template<typename V> pub_(V v) : U(v) { }

/usr/local/include/boost/iostreams/detail/access_control.hpp:43:49: error: expected ‘{’ at end of input
         template<typename V> pub_(V v) : U(v) { }

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Проблема решена. Одно предостережение, что инструкция #define _TURN_OFF_PLATFORM_STRING должна быть добавлена ​​в самую верхнюю (первую строку) файла .h /.cpp, куда импортируются обсуждаемые библиотеки.

1 голос
/ 09 марта 2020

Попробуйте использовать это:

#define _TURN_OFF_PLATFORM_STRING

Это может быть связано с конфликтом некоторых макросов, определенных в других включенных библиотеках.

Вы можете попробовать переключиться на Boost 1.72.0, если это не так работать с последней версией g ++ (9.2.0). Перепроверьте флаги вашего компилятора и, если проблема не устранена, сделайте комментарий с достаточным количеством кода, чтобы воспроизвести вашу ошибку.

...