다음을 통해 공유


컴파일러 경고(수준 4) C4256

'function': 가상 기반이 있는 클래스의 생성자에는 '...'가 있습니다. 호출이 이전 버전의 Visual C++와 호환되지 않을 수 있음

호환되지 않습니다.

다음 코드 예제를 생각해보세요. 생성자 S2::S2(int i, ... )의 정의가 버전 7 이전의 Microsoft C++ 컴파일러 버전을 사용하여 컴파일되었지만 다음 예제는 현재 버전을 사용하여 컴파일된 경우 특수 사례 호출 규칙 변경으로 인해 S3 생성자에 대한 호출이 제대로 작동하지 않습니다. 두 항목이 모두 Visual C++ 6.0을 사용해서 컴파일된 경우, 줄임표에 대해 전달된 매개 변수가 없지 않은 한 어느 항목에서도 호출이 올바르게 작동하지 않습니다.

이 경고를 해결하려면

  1. 생성자에서 줄임표를 사용하지 마세요.

  2. 프로젝트의 모든 구성 요소가 현재 버전(이 클래스를 정의하거나 참조할 수 있는 라이브러리 포함)으로 빌드되었는지 확인한 다음 경고 pragma를 사용하여 경고를 사용하지 않도록 설정합니다.

다음 샘플에서는 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()
{
}