web-dev-qa-db-ja.com

gcc warning "'後に初期化されます'

変更できないサードパーティのコードからこれらの警告の多くを受け取っています。この警告を無効にする方法はありますか、少なくとも特定の領域(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_'
207
LK__

メンバーがクラスに表示されるのと同じ順序で初期化子リストに表示されることを確認します

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

または、-Wno-reorderを有効にすることができます

336
uray

-Wno-reorderで無効にできます。

29

このエラーのあるQTを使用している場合は、これを.proファイルに追加してください

QMAKE_CXXFLAGS_WARN_ON += -Wno-reorder
16
user1175197

-Wno-reorderを使用します(gccはあなたの友達です:))

7
LaszloG

ライブラリヘッダーからエラーが表示され、GCCを使用している場合は、-isystemの代わりに-Iを使用してヘッダーを含めることにより、警告を無効にできます。

同様の機能が clang に存在します。

CMakeを使用している場合、 include_directoriesSYSTEMを指定できます。

4
Drew Noakes

初期化の順序は関係ありません。すべてのフィールドは、クラス/構造体の定義順に初期化されます。ただし、初期化リストの順序が異なる場合、gcc/g ++はこの警告を生成します。この警告を回避するには、初期化順序のみを変更してください。しかし、その構造の前に初期化でフィールドを定義することはできません。ランタイムエラーになります。したがって、定義の順序を変更します。注意して注意を払ってください!

1
Anatoly