Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
"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,
Nie używaj wielokropka w konstruktorze.
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()
{
}