заголовки boost spirit устарели
-
06-09-2019 - |
Вопрос
Я следую руководству по быстрому запуску для boost:: spirit, и я получаю это предупреждение компилятора, когда включаю :"Этот заголовок устарел.Пожалуйста, используйте:boost /spirit/include/classic_core.hpp"Должен ли я беспокоиться об этом?
(краткое руководство по началу работы: http://spirit.sourceforge.net/distrib/spirit_1_8_5/libs/spirit/doc/quick_start.html , с полным исходным кодом программы, которую я пытаюсь скомпилировать здесь: http://spirit.sourceforge.net/distrib/spirit_1_8_5/libs/spirit/example/fundamental/number_list.cpp)
Редактировать:Кроме того, когда я пытаюсь скомпилировать с рекомендуемыми заголовками classic_core.hpp и classic_push_back_actor.hpp, я получаю следующие ошибки компилятора:
test7.cpp: In function 'bool parse_numbers(const char*, __gnu_debug_def::vector<double, std::allocator<double> >&)':
test7.cpp:18: error: 'real_p' was not declared in this scope
test7.cpp:18: error: 'push_back_a' was not declared in this scope
test7.cpp:23: error: 'space_p' was not declared in this scope
test7.cpp:23: error: 'parse' was not declared in this scope
Решение
[РЕДАКТИРОВАТЬ:] Первоначальный ответ сильно устарел;в частности, ссылка не работает.Текущая версия Boost (начиная с 2012-02-24) - 1.49.0.
Упомянутое предупреждение является результатом #include <boost/spirit.hpp>
который является устаревшим заголовком;однако старые примеры в Интернете используют эту форму.Чтобы начать, попробуйте улучшайте учебные пособия.Как только вы увидите правильные включения и пространства имен, большинство старых примеров можно будет легко преобразовать.
[СТАРЫЙ ОТВЕТ:]
Вы, должно быть, используете boost 1.39 или более позднюю версию (через SVN).Эта презентация должна помочь:
Короче говоря, есть совершенно новый способ делать что-то, и это те пространства имен, которые нужно использовать:
boost::spirit:qi
(для синтаксического анализатора)boost::spirit::karma
(для библиотеки генератора)
Официальная версия - 1.40, так что, вероятно, к тому времени документ будет обновлен.
Редактировать: документ в репозитории boost SVN над ним ведется работа, и, вероятно, он более точно отражает новую архитектуру.
Другие советы
Когда вы включаете классические заголовки, анализаторы находятся в пространстве имен boost::spirit:: classic.Попробуй:
использование пространства имен boost::spirit::classic;
Когда библиотека указывает, что класс / заголовок / метод / и т.д.является устаревшим, это означает, что сопровождающий библиотеку, скорее всего, прекратит поддерживать функциональность и может удалить ее в будущем.Я бы рекомендовал переключиться на предлагаемый заголовок как можно скорее, так что избавьте себя от головной боли в будущем.
Новый заголовок может немного отличаться от способа обработки функции, поэтому вам может потребоваться внести некоторые изменения в код.
(Я мало что знаю о boost, это всего лишь общий комментарий)