277 votes

gcc" avertissement "sera initialisé après"

Je reçois beaucoup de ces mises en garde de la 3ème partie du code que je ne peut pas modifier. Est-il un moyen de désactiver cette alerte ou au moins de le désactiver pour certains domaines (comme le #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_'

482voto

uray Points 3560

Assurez-vous que les membres apparaissent dans la liste d'initialiseur dans le même ordre qu'ils apparaissent 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 vous tourner -Wno-reorder

31voto

Lukáš Lalinský Points 22537

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

18voto

user1175197 Points 54

Pour ceux qui utilisent QT avoir cette erreur, ce ajouter .fichier pro

QMAKE_CXXFLAGS_WARN_ON += -Wno-réorganiser

7voto

LaszloG Points 567

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

1voto

Anatoly Points 5

L'ordre de l'initialisation n'a pas d'importance. Tous les champs initialisés dans l'ordre de sa définition dans la classe/struct. Mais si l'ordre dans la liste d'initialisation différents gcc/g++ générer cet avertissement. Seul changement de l'ordre d'initialisation pour éviter cet avertissement. Mais vous ne pouvez pas définir fild usinq lors de l'initialisation avant sa construction. Il sera d'erreur à l'exécution. Si vous modifiez l'ordre de définition. Être prudent et de garder l'attention!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X