Compiler Warning (level 4) C4256
'function' : konstruktor untuk kelas dengan basis virtual memiliki '...'; panggilan mungkin tidak kompatibel dengan versi Visual C++ yang lebih lama
Kemungkinan ketidaksesuaian.
Perhatikan contoh kode berikut. Jika definisi konstruktor S2::S2( int i, ... ) dikompilasi dengan menggunakan versi pengkompilasi Microsoft C++ sebelum versi 7, tetapi contoh berikut dikompilasi dengan menggunakan versi saat ini, panggilan ke konstruktor untuk S3 tidak akan berfungsi dengan benar karena perubahan konvensi panggilan kasus khusus. Jika keduanya dikompilasi dengan menggunakan Visual C++ 6.0, panggilan juga tidak akan berfungsi dengan benar, kecuali tidak ada parameter yang diteruskan untuk elipsis.
Untuk memperbaiki peringatan ini,
Jangan gunakan elipsis dalam konstruktor.
Pastikan bahwa semua komponen dalam proyeknya dibangun dengan versi saat ini (termasuk pustaka apa pun yang dapat menentukan atau mereferensikan kelas ini), lalu nonaktifkan peringatan menggunakan pragma peringatan .
Sampel berikut menghasilkan C4256:
// C4256.cpp
// compile with: /W4
// #pragma warning(disable : 4256)
struct S1
{
};
struct S2: virtual public S1
{
S2( int i, ... ) // C4256
{
i = 0;
}
/*
// try the following line instead
S2( int i)
{
i = 0;
}
*/
};
void func1()
{
S2 S3( 2, 1, 2 ); // C4256
// try the following line instead
// S2 S3( 2 );
}
int main()
{
}
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk