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