Recibo muchas de estas advertencias del código de terceros que no puedo modificar. ¿Hay alguna forma de deshabilitar esta advertencia o al menos deshabilitarla para ciertas áreas (como #pragma push / pop en VC ++)?
Ejemplo:
list.h:1122: warning: `list<LogOutput*, allocator<LogOutput*> >::node_alloc_' will be initialized after
list.h:1117: warning: `allocator<LogOutput*> list<LogOutput*, allocator<LogOutput*> >::alloc_'
g++
suppress-warnings
LK__
fuente
fuente
Respuestas:
Asegúrese de que los miembros aparezcan en la lista de inicializadores en el mismo orden en que aparecen en la clase
o puedes girar
-Wno-reorder
fuente
b
y laa
inicialización podrían depender unos de otros. Un usuario ingenuo podría intentar alterar el orden de inicialización para obtener algún efecto y la Advertencia dejaría en claro que no funciona.-Wno-reorder
sin mencionar a qué problemas podría conducir. Soy consciente de que el OP no solicitó ningún otro detalle, pero una respuesta tan altamente votada esperaría al menos mencionar el contexto y las advertencias al respecto. ¿No se supone que debemos responder la pregunta que el OP debería haber escrito?Puedes deshabilitarlo con
-Wno-reorder
.fuente
Para aquellos que usan QT que tienen este error, agregue esto al archivo .pro
fuente
uso
-Wno-reorder
(man gcc es tu amigo :))fuente
Si ve errores en los encabezados de la biblioteca y está usando GCC, puede deshabilitar las advertencias al incluir los encabezados usando en
-isystem
lugar de-I
.Características similares existen en clang .
Si está utilizando CMake, puede especificar
SYSTEM
parainclude_directories
.fuente
SYSTEM
"?include_directories
línea.El orden de inicialización no importa. Todos los campos se inicializan en el orden de su definición en su clase / estructura. Pero si el orden en la lista de inicialización es diferente, gcc / g ++ genera esta advertencia. Solo cambie el orden de inicialización para evitar esta advertencia. Pero no puede definir el campo utilizando en la inicialización antes de su construcción. Será un error de tiempo de ejecución. Entonces cambias el orden de definición. ¡Ten cuidado y mantén la atención!
fuente
el orden es importante porque si a se inicializa antes que b, y a depende de b. aparecerá un comportamiento indefinido.
fuente