Compilerwarnung (Stufe 1) C4743

Aktualisiert: November 2007

'type' has different size in 'file1' and 'file2': number and number bytes

'type' hat eine unterschiedliche Größe in 'file1' und 'file2': number und number Bytes

Eine externe Variable, auf die in zwei Dateien verwiesen wird oder die in zwei Dateien definiert wird, ist in diesen Dateien von verschiedenem Typ. Der Compiler stellt des Weiteren fest, dass die Größe der Variablen in file1 sich von der Größe der Variablen in file2 unterscheidet.

Die Ausgabe dieser Warnung für C++ stellt einen wichtigen Fall dar. Der Compiler kann die Warnung C4744 für virtuelle Funtkionstabellen ausgeben, wenn die folgenden Umstände vorliegen: Es werden in zwei verschiedenen Dateien dieselben Typen mit demselben Namen deklariert und diese Deklarationen enthalten virtuelle Funktionen und sind verschieden. Die Warnung tritt auf, da zwei virtuelle Funktionstabellen verschiedener Größe für denselben Typ vorliegen, und der Linker muss eine dieser Tabellen für die Einbindung in der ausführbaren Datei auswählen. Es besteht die Möglichkeit, dass aus diesem Grund durch das Programm die falsche virtuelle Funktion aufgerufen wird.

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

Beispiel

In diesem Beispiel wird eine einzelne Typdefinition verwendet.

// C4743a.cpp
// compile with: /c
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;

Im folgenden Beispiel wird C4743 generiert.

// C4743b.cpp
// compile with: C4743a.cpp /W1 /GL /O2
// C4743 expected
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() {}