web-dev-qa-db-fra.com

avertissement gcc "sera initialisé après"

Je reçois beaucoup de ces avertissements d'un code tiers que je ne peux pas modifier. Existe-t-il un moyen de désactiver cet avertissement ou au moins de le désactiver pour certaines zones (comme #pragma Push/pop dans VC++)?

Exemple:

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_'
207
LK__

Assurez-vous que les membres apparaissent dans la liste d'initialisation dans le même ordre que dans la classe.

Class C {
   int a;
   int b;
   C():b(1),a(2){} //warning, should be C():a(2),b(1)
}

ou vous pouvez activer -Wno-reorder

336
uray

Vous pouvez le désactiver avec -Wno-reorder.

29
Lukáš Lalinský

Pour ceux qui utilisent QT ayant cette erreur, ajoutez ceci au fichier .pro

QMAKE_CXXFLAGS_WARN_ON += -Wno-reorder
16
user1175197

utilisez -Wno-reorder (man gcc est votre ami :))

7
LaszloG

Si vous voyez des erreurs dans les en-têtes de bibliothèque et que vous utilisez GCC, vous pouvez désactiver les avertissements en incluant les en-têtes à l'aide de _-isystem_ au lieu de _-I_.

Des caractéristiques similaires existent dans clang .

Si vous utilisez CMake, vous pouvez spécifier SYSTEM pour include_directories .

4
Drew Noakes

L'ordre d'initialisation n'a pas d'importance. Tous les champs sont initialisés dans l'ordre de leur définition dans leur classe/structure. Mais si l'ordre dans la liste d'initialisation est différent, gcc/g ++ génère cet avertissement. Modifiez uniquement l'ordre d'initialisation pour éviter cet avertissement. Mais vous ne pouvez pas définir le champ en utilisant l'initialisation avant sa construction. Ce sera une erreur d'exécution. Donc, vous changez l'ordre de définition. Soyez prudent et gardez l'attention!

1
Anatoly