2009-11-29 22 views
11

Actualmente recibo advertencias del compilador que se asemejan a la advertencia que di en el título de la pregunta. Advertencias como ....boost :: system :: (...) _ categoría definida pero no utilizada

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

Por lo que yo sé que el programa no está siendo afectada de ninguna manera. Sin embargo, no me gustan las advertencias, pero no tengo idea de lo que estas advertencias intentan decirme, además de que algo definido y relacionado con el impulso está dando vueltas en algún lugar sin ser usado. Sin embargo, todo lo que he definido, lo he usado. Las bibliotecas de refuerzo que estoy usando son la biblioteca aleatoria y la biblioteca del sistema de archivos.

Cuando compruebo la fuente de la advertencia que nos lleva a error_category.hpp archivo de Boost y destaca algunos static const s que se comentan, ya sea como "categorías predefinidas de error" o "sinónimos en desuso". Tal vez el problema tiene algo que ver con mi manejo de errores (o la falta de) al usar la biblioteca?

¿Alguien puede dar una idea de por qué estas advertencias están apareciendo? ¿Me estoy perdiendo algo por completo?

P.S. Las advertencias están en el nivel máximo.

Respuesta

7

Esto se relaciona con la biblioteca error_code en la biblioteca Boost.System. Boost error_codes contiene dos atributos: valores y categorías. Para hacer que los códigos de error sean extensibles para que los usuarios de la biblioteca puedan diseñar sus propias categorías de error, los diseñadores de impulso necesitaron alguna manera de representar una categoría de código de error única. Un simple número de identificación no sería suficiente, ya que esto podría generar dos proyectos que usan números de identificación conflictivos para categorías de error personalizadas.

Básicamente, lo que hicieron fue utilizar direcciones de memoria, en forma de objetos estáticos que heredan de la clase base error_category. Estas variables en realidad no hacen nada excepto para servir como identificadores únicos de una cierta categoría de error. Debido a que son esencialmente objetos ficticios estáticos con direcciones únicas en la memoria, puede crear fácilmente sus propias categorías de error personalizadas que no interferirán con otros "ID" de categoría de error. Vea here para más información.

Supongo que lo que está viendo es un efecto secundario de esta decisión de diseño. Dado que estas variables nunca se utilizan realmente en su programa, el compilador genera advertencias. Baste decir, no creo que estés haciendo algo mal.

+0

Estoy teniendo el mismo problema pero mi enlazador no está completando el trabajo, por lo que parece un gran problema por lo que puedo ver. – Rhubarb

+12

... excepto que uno ya no puede usar '-Werror' debido a esto – vladr

20

Estoy de acuerdo con @Charles Salvia, pero quería agregar que al menos a partir de Boost 1.44.0, estas definiciones ahora están incluidas, para que se excluyan como obsoletas. Entonces, si no los está usando, solo incluya las siguientes líneas antes de incluir el archivo de encabezado:

#ifndef BOOST_SYSTEM_NO_DEPRECATED 
#define BOOST_SYSTEM_NO_DEPRECATED 1 
#endif 
+0

Lo estoy definiendo pero no silencia las advertencias. –

+2

funcionó para mí. –

+0

IMO esta debería ser la respuesta, o usar el indicador del compilador -D para especificar esta definición. – ColinCren

Cuestiones relacionadas