다음을 통해 공유


컴파일러 경고(수준 1) C4743

'type'의 크기는 'file1' 및 'file2'입니다. size_1 및 size_2 바이트

두 파일에서 참조되거나 정의된 외부 변수는 해당 파일에 서로 다른 형식을 가지며 컴파일러는 file1의 변수 크기가 file2의 변수 크기와 다른지 확인했습니다.

설명

C++에 대해 이 경고를 내보낼 수 있는 중요한 경우가 있습니다. 두 개의 다른 파일에서 이름이 같은 클래스 형식을 선언하는 경우 해당 선언에 가상 함수가 포함되어 있고 선언이 동일하지 않은 경우 컴파일러는 가상 함수 테이블에 대한 경고 C4744를 내보낼 수 있습니다. 동일한 형식에 대해 서로 다른 크기의 가상 함수 테이블이 두 개 있고 링커가 실행 파일에 통합할 테이블 중 하나를 선택해야 하기 때문에 경고가 발생합니다. 프로그램이 잘못된 가상 함수를 호출할 수 있습니다.

이 경고를 해결하려면 동일한 형식 정의를 사용하거나 형식 또는 변수에 다른 이름을 사용합니다.

예시

다음 샘플에서는 C4743을 생성합니다. 컴파일하려면 두 파일을 동일한 폴더에 배치한 다음 개발자 명령 프롬프트에서 다음 명령을 실행합니다.

cl /EHsc /W1 /GL /O2 C4743a.cpp C4743b.cpp

원본 파일 C4743a.cpp:

// C4743a.cpp
class C {
public:
    virtual void f1(void);
    virtual void f2(void);
    virtual void f3(void);
};

void C::f1(void) {}
void C::f2(void) {}
void C::f3(void) {}
C q;

원본 파일 C4743b.cpp:

// C4743b.cpp
class C {
public:
    virtual void f1(void);
    virtual void f2(void);
    virtual void f3(void);
    virtual void f4(void);
    virtual void f5(void);
};

void C::f4(void) {}
void C::f5(void) {}
C x;

int main() {}

이 문제를 해결하려면 클래스 중 C 하나의 이름을 바꿉니다.