Как заставить замолчать "чей тип использует анонимное пространство имен [-Werror]" gcc версии 4.8.2
В одном из заголовочных файлов моего проекта следующая строка включена в inline
метод
typedef boost::archive::iterators::transform_width<boost::archive::iterators::binary_from_base64< boost::archive::iterators::remove_whitespace<std::string::const_iterator>>, 8, 6> Base64ToBin;
Когда я компилирую это с gcc 4.8.2, я получаю следующую ошибку:
ошибка: 'boost:: archive:: iterators:: remove_whitespace <__ gnu_cxx:: __ normal_iterator>>' имеет поле 'boost:: archive:: iterators:: remove_whitespace <__ gnu_cxx:: __ normal_iterator>>::', тип которого использует аноним пространство имен [-Werror]
Я действительно сильно бьюсь, но не смог решить эту проблему, также по ссылке1 и ссылке2 похоже, что это проблема с более низкой версией gcc. Может кто-нибудь подскажет, как заставить замолчать это предупреждение или покончить с этим. Я использую -Werror флаг компиляции.
1 ответ
Это похоже на правильное предупреждение. Поскольку код находится в заголовке, он будет включен из нескольких файлов, но анонимное пространство имен уникально для каждого файла. Это означает, что тип не имеет одинакового определения везде.
Решение: переместите соответствующий код в файл.cpp.