Partager via


Avertissement du compilateur (niveau 4) C4256

'function' : constructeur pour la classe avec des bases virtuelles a '...' ; les appels peuvent ne pas être compatibles avec les versions antérieures de Visual C++

Incompatibilité possible.

Considérez l’exemple de code suivant. Si la définition du constructeur S2 ::S2( int i, ... ) a été compilée à l’aide d’une version du compilateur Microsoft C++ avant la version 7, mais que l’exemple suivant est compilé à l’aide de la version actuelle, l’appel au constructeur pour S3 ne fonctionne pas correctement en raison d’une modification de convention d’appel à cas spécial. Si les deux ont été compilés à l’aide de Visual C++ 6.0, l’appel ne fonctionne pas non plus correctement, sauf si aucun paramètre n’a été passé pour les points de suspension.

Pour corriger cet avertissement,

  1. N’utilisez pas de points de suspension dans un constructeur.

  2. Assurez-vous que tous les composants de leur projet sont générés avec la version actuelle (y compris les bibliothèques qui peuvent définir ou référencer cette classe), puis désactivez l’avertissement à l’aide du pragma d’avertissement .

L’exemple suivant génère l’erreur 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()
{
}