Freigeben über


Compilerwarnung (Ebene 4) C4256

'function' : Konstruktor für Klasse mit virtuellen Basen hat '...'; Aufrufe sind möglicherweise nicht kompatibel mit älteren Versionen von Visual C++

Mögliche Inkompatibilität.

Betrachten Sie folgendes Codebeispiel. Wenn die Definition des Konstruktors S2::S2( int i, ... ) mithilfe einer Version des Microsoft C++-Compilers vor Version 7 kompiliert wurde, das folgende Beispiel jedoch mithilfe der aktuellen Version kompiliert wird, funktioniert der Aufruf des Konstruktors für S3 aufgrund einer Änderung der Konvention für spezielle Fälle nicht ordnungsgemäß. Wenn beide mit Visual C++ 6.0 kompiliert wurden, funktioniert der Aufruf auch nicht ganz richtig, es sei denn, es wurden keine Parameter für die Auslassungspunkte übergeben.

Um diese Warnung zu beheben,

  1. Verwenden Sie keine Auslassungspunkte in einem Konstruktor.

  2. Stellen Sie sicher, dass alle Komponenten in ihrem Projekt mit der aktuellen Version erstellt werden (einschließlich aller Bibliotheken, die diese Klasse definieren oder referenzieren können), und deaktivieren Sie dann die Warnung mithilfe des Warnungs pragma.

Im folgenden Beispiel wird C4256 generiert:

// 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()
{
}