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