esprit d'amplification en-têtes désapprouvés
-
06-09-2019 - |
Question
Je suivais le guide de démarrage rapide pour boost :: esprit, et je reçois cet avertissement du compilateur quand je les suivantes: «Cet en-tête est dépréciée S'il vous plaît utiliser: boost / esprit / include / classic_core.hpp » Dois-je être inquiet à ce sujet ?
(guide de démarrage rapide: http: // esprit. sourceforge.net/distrib/spirit_1_8_5/libs/spirit/doc/quick_start.html , avec la pleine source du programme que je suis en train de compiler ici: http://spirit.sourceforge.net/distrib/spirit_1_8_5/libs/spirit/example/fundamental/number_list.cpp )
edit: De plus, lorsque je tente de compiler avec les en-têtes de classic_core.hpp et classic_push_back_actor.hpp recommandés, je reçois les erreurs du compilateur suivantes:
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
La solution
[EDIT:] La réponse originale est mal à jour; en particulier, le lien est brisé. La version actuelle de Boost (depuis 2012-02-24) est 1.49.0.
L'avertissement mentionné est le résultat de #include <boost/spirit.hpp>
qui est un en-tête obsolète; cependant des exemples anciens sur le web utilisent ce formulaire. Pour commencer, essayez stimuler des tutoriels . Une fois que vous voyez le bon et inclut les espaces de noms, la plupart des anciens exemples peuvent facilement être convertis.
[REPONSE VIEUX:]
Vous devez utiliser boost 1.39 ou version ultérieure (via SVN). Cette présentation devrait aider:
En bref, il y a une toute nouvelle façon de faire chose et ce sont les espaces de noms à utiliser:
-
boost::spirit:qi
(pour l'analyseur) -
boost::spirit::karma
(pour le générateur lib)
La version officielle est 1,40 donc probablement à ce moment le doc sera mis à jour.
EDIT: le doc dans le coup de pouce dépôt SVN est en cours d'élaboration et reflète probablement la nouvelle architecture de manière plus fidèle.
Autres conseils
Lorsque vous incluez les en-têtes classiques sont les parseurs dans l'esprit boost :: :: namespace classique. Essayez:
en utilisant boost :: namespace esprit :: classique;
Quand une bibliothèque indique qu'une classe / tête / méthode / etc. est désapprouvée, cela signifie que le mainteneur de la bibliothèque sera très probablement cesser de maintenir la fonctionnalité, et peut supprimer à l'avenir. Je recommande de passer à l'en-tête suggéré plus tôt que tard, donc vous épargner des maux de tête à l'avenir.
Le nouvel en-tête peut avoir une manière légèrement différente de la manipulation de la fonction, de sorte que vous devrez peut-être faire quelques changements de code.
(Je ne sais pas beaucoup sur coup de pouce, c'est un commentaire général)