変更できないサードパーティのコードからこれらの警告の多くを受け取っています。この警告を無効にする方法はありますか、少なくとも特定の領域(VC++の#pragma Push/popなど)で無効にする方法はありますか?
例:
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_'
メンバーがクラスに表示されるのと同じ順序で初期化子リストに表示されることを確認します
Class C {
int a;
int b;
C():b(1),a(2){} //warning, should be C():a(2),b(1)
}
または、-Wno-reorder
を有効にすることができます
-Wno-reorder
で無効にできます。
このエラーのあるQTを使用している場合は、これを.proファイルに追加してください
QMAKE_CXXFLAGS_WARN_ON += -Wno-reorder
-Wno-reorder
を使用します(gccはあなたの友達です:))
ライブラリヘッダーからエラーが表示され、GCCを使用している場合は、-isystem
の代わりに-I
を使用してヘッダーを含めることにより、警告を無効にできます。
同様の機能が clang に存在します。
CMakeを使用している場合、 include_directories
にSYSTEM
を指定できます。
初期化の順序は関係ありません。すべてのフィールドは、クラス/構造体の定義順に初期化されます。ただし、初期化リストの順序が異なる場合、gcc/g ++はこの警告を生成します。この警告を回避するには、初期化順序のみを変更してください。しかし、その構造の前に初期化でフィールドを定義することはできません。ランタイムエラーになります。したがって、定義の順序を変更します。注意して注意を払ってください!