Partilhar via


Aviso do compilador (nível 1) C4743

'type' tem tamanho diferente em 'file1' e 'file2': size_1 e size_2 bytes

Uma variável externa referenciada ou definida em dois arquivos tem tipos diferentes nesses arquivos, e o compilador determinou que o tamanho da variável em file1 difere do tamanho da variável em file2.

Comentários

Há um caso importante em que esse aviso pode ser emitido para C++. Se você declarar tipos de classe com o mesmo nome em dois arquivos diferentes, se essas declarações contiverem funções virtuais e se as declarações não forem as mesmas, o compilador poderá emitir o aviso C4744 para as tabelas de funções virtuais. O aviso ocorre porque há duas tabelas de funções virtuais de tamanhos diferentes para o mesmo tipo e o vinculador deve escolher uma delas para incorporar ao executável. É possível que isso faça com que o seu programa chame a função virtual errada.

Para resolver esse aviso, use a mesma definição de tipo ou use nomes diferentes para os tipos ou variáveis.

Exemplo

O exemplo a seguir gera C4743. Para compilá-lo, coloque os dois arquivos na mesma pasta e execute este comando em um prompt de comando do desenvolvedor:

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

Arquivo de origem 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;

Arquivo de origem 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 esse problema, renomeie uma das classes C.