Compartilhar via


Aviso do compilador (nível 4) C4256

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

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 do Microsoft C++ antes da versão 7, mas o exemplo a seguir é compilado usando a versão atual, a chamada ao 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 corretamente, a menos que nenhum parâmetro fosse passado para as reticências.

Para corrigir esse aviso,

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

  2. Verifique se todos os componentes em seu projeto foram criados com a versão atual (incluindo todas as bibliotecas que podem definir ou referenciar essa classe) e desabilite o aviso usando o pragma warning.

O seguinte exemplo gera o erro 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()
{
}