Bagikan melalui


Compiler Warning C5038

anggota data 'member1' akan diinisialisasi setelah anggota data 'member2'
anggota data 'anggota' akan diinisialisasi setelah kelas dasar 'base_class'

Keterangan

Anggota kelas diinisialisasi dalam urutan yang dideklarasikan, bukan urutan mereka muncul dalam daftar penginisialisasi. Kompilator memperingatkan ketika urutan inisialisasi tidak sama dengan urutan deklarasi anggota data atau kelas dasar. Urutan dapat menyebabkan perilaku runtime yang tidak terdefinisi: misalnya, jika inisialisasi satu anggota dalam daftar tergantung pada inisialisasi anggota yang dinyatakan nanti.

Peringatan ini baru di Visual Studio 2017 versi 15.3, dan nonaktif secara default. Gunakan /Wall untuk mengaktifkan semua peringatan yang nonaktif secara default, atau /w15038 untuk mengaktifkan C5038 sebagai peringatan tingkat 1. Untuk informasi selengkapnya, lihat Peringatan pengkompilasi yang nonaktif secara default. Untuk informasi tentang cara menonaktifkan peringatan berdasarkan versi kompilator, lihat Peringatan pengkompilasi menurut versi kompilator.

Contoh

Dalam contoh berikut, Pengkompilasi (saat menggunakan /w15038) memunculkan "peringatan C5038: anggota data 'A::y' akan diinisialisasi setelah anggota data 'A::x'":

// C5038.cpp
// Compile using: cl /EHsc /c /w15038 C5038.cpp
struct A
{
    A(int a) : y(a), x(y) {} // C5038, Initialized in reverse, y reused
    int x;
    int y;
};

Untuk memperbaiki masalah ini, atur daftar penginisialisasi agar memiliki urutan yang sama dengan deklarasi. Peringatan serupa dimunculkan ketika satu atau kedua penginisialisasi merujuk ke anggota kelas dasar.