Share via


Advertencia del compilador (nivel 4) C4256

"function": el constructor para la clase con bases virtuales tiene "..."; puede que las llamadas no sean compatibles con versiones anteriores de Visual C++

Posible incompatibilidad.

Observe el siguiente ejemplo de código. Si la definición del constructor S2::S2( int i, ... ) se compilara con una versión del compilador de Microsoft C++ anterior a la versión 7, pero el ejemplo siguiente se compilara con la versión actual, la llamada al constructor para S3 no funcionaría correctamente debido a que la convención de llamadas cambia en casos especiales. Si ambos se compilaran con Visual C++ 6.0, la llamada tampoco funcionaría bien, a menos que no se pasaran parámetros para los puntos suspensivos.

Para corregir esta advertencia:

  1. No use puntos suspensivos en un constructor.

  2. Asegúrese de que todos los componentes del proyecto se compilan con la versión actual (incluidas las bibliotecas que pueden definir o hacer referencia a esta clase) y, luego, deshabilite la advertencia mediante la pragma warning.

El ejemplo siguiente genera la advertencia 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()
{
}