Udostępnij za pomocą


Ostrzeżenie kompilatora (poziom 4) C4256

"function" : konstruktor klasy z bazami wirtualnymi ma '...'; wywołania mogą nie być zgodne ze starszymi wersjami programu Visual C++

Uwagi

Możliwa niezgodność.

Spójrz na poniższy przykład kodu. Jeśli definicja konstruktora S2::S2( int i, ... ) została skompilowana przy użyciu wersji kompilatora Microsoft C++ przed wersją 7, ale poniższy przykład jest kompilowany przy użyciu bieżącej wersji, wywołanie konstruktora dla S3 nie będzie działać poprawnie z powodu specjalnej zmiany konwencji wywoływania wielkości liter. Jeśli obie zostały skompilowane przy użyciu języka Visual C++ 6.0, wywołanie nie będzie działać prawidłowo, chyba że żadne parametry nie zostały przekazane dla wielokropka.

Aby naprawić to ostrzeżenie,

  1. Nie używaj wielokropka w konstruktorze.

  2. Upewnij się, że wszystkie składniki w projekcie są kompilowane przy użyciu bieżącej wersji (w tym wszystkich bibliotek, które mogą definiować lub odwoływać się do tej klasy), a następnie wyłącz ostrzeżenie przy użyciu pragma ostrzeżenia .

Example

Poniższy przykład generuje 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()
{
}