Share via


Upozornění kompilátoru (úroveň 1) C4743

'type' má jinou velikost v 'file1' a 'file2': size_1 a size_2 bajty

Externí proměnná odkazovaná nebo definovaná ve dvou souborech má v těchto souborech různé typy a kompilátor zjistil, že velikost proměnné v souboru1 se liší od velikosti proměnné v souboru2.

Poznámky

Existuje důležitý případ, kdy se toto upozornění dá vygenerovat pro jazyk C++. Pokud deklarujete typy tříd se stejným názvem ve dvou různých souborech, pokud tyto deklarace obsahují virtuální funkce a pokud deklarace nejsou stejné, kompilátor může vygenerovat upozornění C4744 pro tabulky virtuálních funkcí. K upozornění dochází, protože existují dvě tabulky virtuálních funkcí s různou velikostí pro stejný typ a linker si musí vybrat jednu z nich, která se má začlenit do spustitelného souboru. Je možné, že to může vést k tomu, že program volá nesprávnou virtuální funkci.

Pokud chcete toto upozornění vyřešit, použijte buď stejnou definici typu, nebo použijte jiné názvy pro typy nebo proměnné.

Příklad

Následující ukázka vygeneruje C4743. Pokud ho chcete zkompilovat, umístěte oba soubory do stejné složky a potom spusťte tento příkaz na příkazovém řádku pro vývojáře:

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

Zdrojový soubor 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;

Zdrojový soubor 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() {}

Pokud chcete tento problém vyřešit, přejmenujte jednu z C tříd.