Bagikan melalui


Compiler Warning (Level 1) C4743

'type' memiliki ukuran yang berbeda dalam 'file1' dan 'file2': size_1 dan size_2 byte

Variabel eksternal yang dirujuk atau didefinisikan dalam dua file memiliki jenis yang berbeda dalam file tersebut, dan pengkompilasi menentukan bahwa ukuran variabel dalam file1 berbeda dari ukuran variabel dalam file2.

Keterangan

Ada kasus penting ketika peringatan ini dapat dipancarkan untuk C++. Jika Anda mendeklarasikan jenis kelas dengan nama yang sama dalam dua file berbeda, jika deklarasi tersebut berisi fungsi virtual, dan jika deklarasi tidak sama, pengkompilasi dapat mengeluarkan peringatan C4744 untuk tabel fungsi virtual. Peringatan terjadi karena ada dua tabel fungsi virtual berukuran berbeda untuk jenis yang sama, dan linker harus memilih salah satunya untuk dimasukkan ke dalam executable. Ada kemungkinan bahwa itu dapat mengakibatkan program Anda memanggil fungsi virtual yang salah.

Untuk mengatasi peringatan ini, gunakan definisi jenis yang sama atau gunakan nama yang berbeda untuk jenis atau variabel.

Contoh

Sampel berikut menghasilkan C4743. Untuk mengkompilasinya, tempatkan kedua file di folder yang sama, lalu jalankan perintah ini di prompt perintah pengembang:

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

File sumber 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;

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

Untuk mengatasi masalah ini, ganti nama salah C satu kelas.