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_'
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
Vous pouvez le désactiver avec -Wno-reorder
.
Pour ceux qui utilisent QT ayant cette erreur, ajoutez ceci au fichier .pro
QMAKE_CXXFLAGS_WARN_ON += -Wno-reorder
utilisez -Wno-reorder
(man gcc est votre ami :))
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
.
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!