Partager via


Avertissement du compilateur (niveau 1) C4743

'type' a une taille différente dans 'file1' et 'file2' : size_1 et size_2 octets

Une variable externe référencée ou définie dans deux fichiers a des types différents dans ces fichiers, et le compilateur a déterminé que la taille de la variable dans file1 diffère de la taille de la variable dans le fichier2.

Notes

Il existe un cas important lorsque cet avertissement peut être émis pour C++. Si vous déclarez des types de classes portant le même nom dans deux fichiers différents, si ces déclarations contiennent des fonctions virtuelles et si les déclarations ne sont pas identiques, le compilateur peut émettre l’avertissement C4744 pour les tables de fonctions virtuelles. L’avertissement se produit, car il existe deux tables de fonctions virtuelles de taille différente pour le même type, et l’éditeur de liens doit choisir l’une d’entre elles pour l’incorporer dans l’exécutable. Il est possible qu’il puisse entraîner l’appel de la fonction virtuelle incorrecte par votre programme.

Pour résoudre cet avertissement, utilisez la même définition de type ou utilisez des noms différents pour les types ou variables.

Exemple

L’exemple suivant génère l’erreur C4743. Pour la compiler, placez les deux fichiers dans le même dossier, puis exécutez cette commande dans une invite de commandes développeur :

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

Fichier source 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;

Fichier source 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() {}

Pour résoudre ce problème, renommez l’une C des classes.