Freigeben über


Compilerwarnung (Ebene 1) C4743

"type" weist in 'file1' und 'file2' unterschiedliche Größe auf: size_1 und size_2 Bytes

Eine externe Variable, auf die in zwei Dateien verwiesen oder definiert wurde, weist unterschiedliche Typen in diesen Dateien auf, und der Compiler hat festgestellt, dass sich die Größe der Variablen in Datei1 von der Größe der Variablen in Datei2 unterscheidet.

Hinweise

Es gibt einen wichtigen Fall, wenn diese Warnung für C++ ausgegeben werden kann. Wenn Sie Klassentypen mit demselben Namen in zwei verschiedenen Dateien deklarieren, wenn diese Deklarationen virtuelle Funktionen enthalten und die Deklarationen nicht identisch sind, kann der Compiler die Warnung C4744 für die tabellen der virtuellen Funktionen ausgeben. Die Warnung tritt auf, da es zwei unterschiedliche virtuelle Funktionstabellen für denselben Typ gibt, und der Linker muss eine davon auswählen, die in die ausführbare Datei integriert werden soll. Es ist möglich, dass es dazu führen kann, dass Ihr Programm die falsche virtuelle Funktion aufruft.

Um diese Warnung zu beheben, verwenden Sie entweder dieselbe Typdefinition, oder verwenden Sie unterschiedliche Namen für die Typen oder Variablen.

Beispiel

Im folgenden Beispiel wird C4743 generiert. Um sie zu kompilieren, platzieren Sie beide Dateien im selben Ordner, und führen Sie dann diesen Befehl an einer Entwickler-Eingabeaufforderung aus:

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

Quelldatei 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;

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

Um dieses Problem zu beheben, benennen Sie eine der C Klassen um.