Bagikan melalui


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,

  1. Jangan gunakan elipsis dalam konstruktor.

  2. 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()
{
}