Condividi tramite


Avviso del compilatore (livello 4) C4256

'function': costruttore per la classe con basi virtuali ha '...'; Le chiamate potrebbero non essere compatibili con le versioni precedenti di Visual C++

Possibile incompatibilità.

Osservare l'esempio di codice seguente. Se la definizione del costruttore S2::S2( int i, ... ) è stata compilata usando una versione del compilatore Microsoft C++ precedente alla versione 7, ma l'esempio seguente viene compilato usando la versione corrente, la chiamata al costruttore per S3 non funzionerebbe correttamente a causa di una modifica di convenzione di chiamata caso speciale. Utilizzando Visual C++ 6.0, in entrambi i casi la chiamata non funziona comunque, a meno che non venga passato alcun parametro per i puntini di sospensione.

Per correggere l'avviso,

  1. Non usare i puntini di sospensione in un costruttore.

  2. Assicurarsi che tutti i componenti del progetto vengano compilati con la versione corrente (incluse le librerie che possono definire o fare riferimento a questa classe), quindi disabilitare l'avviso usando il pragma di avviso .

L'esempio seguente genera l'errore 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()
{
}