Saya mendapatkan banyak peringatan ini dari kode pihak ke-3 yang tidak dapat saya modifikasi. Apakah ada cara untuk menonaktifkan peringatan ini atau setidaknya menonaktifkannya untuk area tertentu (seperti #pragma push / pop di VC ++)?
Contoh:
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__
sumber
sumber
Jawaban:
Pastikan anggota muncul dalam daftar penginisialisasi dalam urutan yang sama seperti mereka muncul di kelas
atau kamu bisa berbalik
-Wno-reorder
sumber
b
dana
inisialisasi mungkin tergantung satu sama lain. Pengguna yang naif mungkin mencoba mengubah urutan inisialisasi untuk mendapatkan efek dan Peringatan akan memperjelas bahwa itu tidak berfungsi.-Wno-reorder
tanpa menyebutkan masalah apa yang bisa menyebabkan. Saya sadar OP tidak meminta detail lain, tetapi jawaban yang sangat tinggi yang saya harapkan setidaknya menyebutkan konteks dan peringatan di sekitar ini. Bukankah kita seharusnya menjawab pertanyaan yang seharusnya ditulis OP ?Anda dapat menonaktifkannya dengan
-Wno-reorder
.sumber
Bagi mereka yang menggunakan QT mengalami kesalahan ini, tambahkan ini ke file .pro
sumber
gunakan
-Wno-reorder
(man gcc adalah teman Anda :))sumber
Jika Anda melihat kesalahan dari tajuk pustaka dan Anda menggunakan GCC, maka Anda bisa menonaktifkan peringatan dengan memasukkan tajuk yang digunakan
-isystem
sebagai gantinya-I
.Fitur serupa ada di dentang .
Jika Anda menggunakan CMake, Anda dapat menentukan
SYSTEM
untukinclude_directories
.sumber
SYSTEM
"?include_directories
baris.Urutan inisialisasi tidak masalah. Semua bidang diinisialisasi dalam urutan definisi mereka di kelas / struct mereka. Tetapi jika urutan dalam daftar inisialisasi berbeda gcc / g ++ menghasilkan peringatan ini. Hanya ubah urutan inisialisasi untuk menghindari peringatan ini. Tetapi Anda tidak dapat mendefinisikan bidang menggunakan inisialisasi sebelum konstruksinya. Ini akan menjadi kesalahan runtime. Jadi, Anda mengubah urutan definisi. Hati-hati dan jaga perhatian!
sumber
urutannya penting karena jika a diinisialisasi sebelum b, dan a bergantung pada b. perilaku yang tidak terdefinisi akan muncul.
sumber