Domanda

sto seguendo la Guida rapida di boost :: spirito e ottengo questo avviso del compilatore quando includo: "Questa intestazione è deprecato favore usate: boost / spirito / include / classic_core.hpp" Dovrei essere preoccupato per questo ?

(Guida rapida: http: // spirito. sourceforge.net/distrib/spirit_1_8_5/libs/spirit/doc/quick_start.html , con sorgente completo del programma che sto cercando di compilare qui: http://spirit.sourceforge.net/distrib/spirit_1_8_5/libs/spirit/example/fundamental/number_list.cpp )

modifica: Inoltre, quando provo a compilare con le intestazioni classic_core.hpp e classic_push_back_actor.hpp raccomandati, ottengo i seguenti errori del compilatore:

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
È stato utile?

Soluzione

[EDIT:] La risposta originale è male fuori moda; in particolare, il collegamento è interrotto. La versione corrente di Boost (dal 2012-02-24) è 1.49.0.

L'avviso menzionato è il risultato di #include <boost/spirit.hpp> che è un'intestazione obsoleta; tuttavia vecchi esempi sul web utilizzano questa forma. Per iniziare, provate il aumentare tutorial . Una volta che si vede il corretto include e spazi dei nomi, la maggior parte dei vecchi esempi possono essere facilmente convertiti.

[RISPOSTA OLD:]

È necessario utilizzare spinta 1.39 o versione successiva (via SVN). Questa presentazione dovrebbe aiutare:

In breve, c'è un nuovo modo di fare cosa e questi sono gli spazi dei nomi da usare:

  • boost::spirit:qi (per il parser)
  • boost::spirit::karma (per la lib generatore)

Il rilascio ufficiale è 1.40 quindi probabilmente da quel momento il doc sarà aggiornato.

EDIT: il doc nella spinta SVN repository è in lavorazione e probabilmente riflettono la nuova architettura in un modo più fedele.

Altri suggerimenti

Quando sei comprese le intestazioni classici i parser sono nel boost :: :: spirito namespace classico. Prova:

  

using namespace boost :: :: spirito classico;

Quando una libreria indica che un / intestazione / metodo di classe / etc. è deprecato, vuol dire che il manutentore della biblioteca sarà molto probabilmente smettere di mantenere la funzionalità, e potrà cancellare in futuro. Suggerirei per passare l'intestazione suggerito prima che poi, in modo da salvare se stessi da mal di testa nel futuro.

La nuova intestazione può avere un modo leggermente diverso di gestire la funzione, quindi potrebbe essere necessario apportare alcune modifiche al codice.

(io non ne so molto di spinta, questo è solo un commento generale)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top