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:
No use puntos suspensivos en un constructor.
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()
{
}