Partilhar via


Aviso do compilador (nível 4) C4256

'function' : construtor para classe com bases virtuais tem '...'; chamadas podem não ser compatíveis com versões mais antigas do Visual C++

Observações

Possível incompatibilidade.

Considere o exemplo de código a seguir. Se a definição do construtor S2::S2( int i, ... ) foi compilada usando uma versão do compilador Microsoft C++ antes da versão 7, mas o exemplo a seguir é compilado usando a versão atual, a chamada para o construtor para S3 não funcionaria corretamente devido a uma alteração de convenção de chamada de caso especial. Se ambos fossem compilados usando o Visual C++ 6.0, a chamada também não funcionaria direito, a menos que nenhum parâmetro fosse passado para as reticências.

Para corrigir este aviso,

  1. Não use reticências em um construtor.

  2. Certifique-se de que todos os componentes em seu projeto são criados com a versão atual (incluindo quaisquer bibliotecas que possam definir ou fazer referência a essa classe) e, em seguida, desative o aviso usando o pragma de aviso .

Example

O exemplo a seguir gera 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()
{
}