Ich erhalte viele dieser Warnungen von Code von Drittanbietern, die ich nicht ändern kann. Gibt es eine Möglichkeit, diese Warnung zu deaktivieren oder zumindest für bestimmte Bereiche zu deaktivieren (z. B. #pragma push / pop in VC ++)?
Beispiel:
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__
quelle
quelle
Antworten:
Stellen Sie sicher, dass die Mitglieder in der Initialisierungsliste in derselben Reihenfolge angezeigt werden, in der sie in der Klasse angezeigt werden
oder du kannst dich umdrehen
-Wno-reorder
quelle
b
unda
Initialisierung könnte voneinander abhängig sind . Ein naiver Benutzer könnte versuchen, die Initialisierungsreihenfolge zu ändern, um einen Effekt zu erzielen, und die Warnung würde deutlich machen, dass dies nicht funktioniert.-Wno-reorder
ohne zu erwähnen, zu welchen Problemen dies führen könnte. Ich bin mir bewusst, dass das OP keine weiteren Details angefordert hat, aber eine so hoch bewertete Antwort würde ich erwarten, zumindest den Kontext und die Vorbehalte dazu zu erwähnen. Sollten wir nicht die Frage der OP beantworten sollte geschrieben haben?Sie können es mit deaktivieren
-Wno-reorder
.quelle
Wenn Sie QT mit diesem Fehler verwenden, fügen Sie dies der .pro-Datei hinzu
quelle
benutze
-Wno-reorder
(man gcc ist dein Freund :))quelle
Wenn Sie Fehler in Bibliotheksheadern sehen und GCC verwenden, können Sie Warnungen deaktivieren, indem Sie die Header
-isystem
anstelle von verwenden-I
.Ähnliche Merkmale gibt es in Clang .
Wenn Sie CMake verwenden, können Sie
SYSTEM
für angebeninclude_directories
.quelle
SYSTEM
"?include_directories
Zeile.Die Reihenfolge der Initialisierung spielt keine Rolle. Alle Felder werden in der Reihenfolge ihrer Definition in ihrer Klasse / Struktur initialisiert. Wenn die Reihenfolge in der Initialisierungsliste jedoch unterschiedlich ist, wird diese Warnung von gcc / g ++ generiert. Ändern Sie nur die Initialisierungsreihenfolge, um diese Warnung zu vermeiden. Sie können das Feld jedoch nicht in der Initialisierung vor seinem Konstrukt definieren. Es wird ein Laufzeitfehler sein. Sie ändern also die Reihenfolge der Definition. Sei vorsichtig und pass auf!
quelle
Die Reihenfolge ist wichtig, denn wenn a vor b initialisiert wird und a von b abhängt. undefiniertes Verhalten wird angezeigt.
quelle