Megosztás a következőn keresztül:


Fordító figyelmeztetése (4. szint) C4256

"függvény" : a virtuális bázisokkal rendelkező osztály konstruktorának "..." van; előfordulhat, hogy a hívások nem kompatibilisek a Visual C++ régebbi verzióival

Megjegyzések

Lehetséges inkompatibilitás.

Tekintse meg a következő kód példáját. Ha a konstruktor S2::S2 ( int i, ... ) definícióját a Microsoft C++ fordító 7-es verzió előtti verziójával állították össze, de az alábbi példa az aktuális verzióval van lefordítva, az S3 konstruktorhoz való hívása nem működik megfelelően egy speciális eseti híváskonvenció-módosítás miatt. Ha mindkettőt a Visual C++ 6.0 használatával fordították le, a hívás sem működne teljesen jól, hacsak nem adtak át paramétereket az ellipszishez.

A figyelmeztetés kijavításához

  1. Ne használjon három pontot konstruktorban.

  2. Győződjön meg arról, hogy a projekt összes összetevője az aktuális verzióval készült (beleértve az osztályt definiáló vagy hivatkozó kódtárakat is), majd tiltsa le a figyelmeztetést a figyelmeztető pragma használatával.

Example

Az alábbi példa c4256-ot hoz létre:

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