2009-11-29 11 views
11

Attualmente sto ricevendo avvisi del compilatore che ricordano l'avviso che ho dato nel titolo della domanda. Avvertenze quali ....boost :: system :: (...) _ categoria definita ma non utilizzata

warning: 'boost::system::generic_category' defined but not used

warning: 'boost::system::posix_category' defined but not used

warning: 'boost::system::errno_ecat' defined but not used

warning: 'boost::system::native_ecat' defined but not used

Per quanto ne so il programma non viene influenzato in alcun modo. Tuttavia, non mi piacciono gli avvertimenti in giro, ma non ho idea di cosa questi avvertimenti stiano cercando di dirmi, oltre al fatto che qualcosa di definito e legato al boost è in agguato da qualche parte non utilizzato. Comunque, tutto ciò che ho definito, l'ho usato. Le librerie di boost che sto utilizzando sono la libreria casuale e la libreria del filesystem.

Quando controllo la fonte della segnalazione si porta in primo piano il file error_category.hpp di Boost ed evidenzia alcuni static const s che sono commentate come "categorie predefinite di errore" o "i sinonimi deprecato". Forse il problema ha qualcosa a che fare con la mia gestione degli errori (o la mancanza di) quando si utilizza la libreria?

Qualcuno può dare qualche idea sul motivo per cui questi avvisi stanno spuntando? Mi manca qualcosa?

P.S. Gli avvisi sono al livello massimo.

risposta

7

Si riferisce alla libreria error_code nella libreria Boost.System. I codici errore boost contengono due attributi: valori e categorie. Per rendere estensibili i file error_codes in modo che gli utenti delle librerie possano progettare le proprie categorie di errore, i progettisti di boost hanno bisogno di un modo per rappresentare una categoria di codice di errore univoca. Un semplice numero ID non sarebbe sufficiente, poiché ciò potrebbe comportare l'utilizzo di due numeri ID in conflitto per categorie di errore personalizzate.

Quindi, in sostanza, ciò che hanno fatto è stato utilizzare gli indirizzi di memoria, sotto forma di oggetti statici che ereditano dalla classe base error_category. Queste variabili in realtà non fanno nulla se non per fungere da identificatori univoci di una certa categoria di errore. Poiché sono essenzialmente oggetti statici fittizi con indirizzi univoci in memoria, è possibile creare facilmente le proprie categorie di errore personalizzate che non interferiranno con altri "ID" di categoria di errore. Vedere here per ulteriori informazioni.

Suppongo che ciò che stai vedendo sia un effetto collaterale di questa decisione di progettazione. Dal momento che queste variabili non sono mai realmente usate nel tuo programma, il compilatore sta generando avvisi. Basti dire, non penso che tu stia facendo qualcosa di sbagliato.

+0

Sto riscontrando lo stesso problema ma il mio linker non sta completando il lavoro, quindi sembra proprio un grosso problema per quanto posso vedere. – Rhubarb

+12

... eccetto che non si può più usare '-Werror' a causa di questo – vladr

20

Sono d'accordo con @Charles Salvia, ma volevo aggiungere che almeno a partire da Boost 1.44.0, queste definizioni sono ora completate - da escludere come deprecate. Quindi, se non li usi, includi le seguenti righe prima di includere il file di intestazione:

#ifndef BOOST_SYSTEM_NO_DEPRECATED 
#define BOOST_SYSTEM_NO_DEPRECATED 1 
#endif 
+0

Lo sto definendo, ma non è sufficiente soffocare gli avvertimenti. –

+2

Ha funzionato per me. –

+0

IMO questa dovrebbe essere la risposta oppure utilizzare il flag del compilatore -D per specificare questa definizione. – ColinCren

Problemi correlati