编译器警告(等级 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 类重命名。