g++ - ejecutar - la advertencia de gcc "''se inicializará después de''
gcc wikipedia (6)
Asegúrese de que los miembros aparecen en la lista de inicializadores en el mismo orden en que aparecen en la clase
Class C {
int a;
int b;
C():b(1),a(2){} //warning, should be C():a(2),b(1)
}
o puede activar -Wno-reorder
Recibo muchas de estas advertencias del código de terceros que no puedo modificar. ¿Hay alguna manera de desactivar 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_''
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 la orden de inicialización para evitar esta advertencia. Pero no puede definir el campo usando en 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 mantente atento!
Para aquellos que usan QT con este error, agréguenlo al archivo .pro
QMAKE_CXXFLAGS_WARN_ON += -Wno-reorder
Puede desactivarlo con -Wno-reorder
.
Si ve errores de los encabezados de la biblioteca y está utilizando GCC, puede desactivar las advertencias incluyendo los encabezados con -isystem
lugar de -I
.
Características similares existen en clang .
Si está utilizando CMake, puede especificar SYSTEM
para include_directories
.
use -Wno-reorder
(man gcc es tu amigo :))