Compartir a través de


Advertencia del compilador (nivel 1) C4743

'type' tiene un tamaño diferente en 'file1' y 'file2': size_1 y size_2 bytes

Una variable externa a la que se hace referencia o se define en dos archivos tiene tipos diferentes en esos archivos y el compilador determinó que el tamaño de la variable en file1 difiere del tamaño de la variable en file2.

Comentarios

Hay un caso importante en el que se puede emitir esta advertencia para C++. Si declara tipos de clase con el mismo nombre en dos archivos diferentes, si esas declaraciones contienen funciones virtuales y, si las declaraciones no son las mismas, el compilador puede emitir la advertencia C4744 para las tablas de funciones virtuales. La advertencia se produce porque hay dos tablas de funciones virtuales de tamaño diferente para el mismo tipo y el enlazador debe elegir uno de ellos para incorporarlo al ejecutable. Es posible que el programa llame a la función virtual incorrecta.

Para resolver esta advertencia, use la misma definición de tipo o use nombres diferentes para los tipos o las variables.

Ejemplo

El ejemplo siguiente genera la advertencia C4743. Para compilarlo, coloque ambos archivos en la misma carpeta y, a continuación, ejecute este comando en un símbolo del sistema para desarrolladores:

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

Archivo de origen 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;

Archivo de origen 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() {}

Para resolver este problema, cambie el nombre de una de las clases C.