分享方式:


編譯器警告 (層級 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 一個類別。