Share via


Upozornění kompilátoru (úroveň 4) C4256

'function' : konstruktor pro třídu s virtuálními základy má '...'; Volání nemusí být kompatibilní se staršími verzemi jazyka Visual C++

Možnou nekompatibilitu.

Podívejte se na následující příklad kódu. Pokud byla definice konstruktoru S2::S2( int i; ... ) zkompilována pomocí verze kompilátoru Microsoft C++ před verzí 7, ale následující příklad je zkompilován pomocí aktuální verze, volání konstruktoru pro S3 nebude fungovat správně kvůli změně konvence volání zvláštních případů. Pokud byly oba kompilovány pomocí visual C++ 6.0, volání by buď nefungovalo zcela správně, pokud nebyly předány žádné parametry pro tři tečky.

Pokud chcete toto upozornění opravit,

  1. Nepoužívejte tři tečky v konstruktoru.

  2. Ujistěte se, že všechny komponenty v projektu jsou vytvořeny s aktuální verzí (včetně všech knihoven, které mohou definovat nebo odkazovat na tuto třídu), a pak zakažte upozornění pomocí pragma upozornění .

Následující ukázka vygeneruje 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()
{
}