Udostępnij za pomocą


Ostrzeżenie kompilatora (poziom 1) C4743

Typ ma inny rozmiar w plikach "file1" i "file2": size_1 i size_2 bajtach

Uwagi

Zmienna zewnętrzna, do którego odwołuje się lub zdefiniowana w dwóch plikach, ma różne typy w tych plikach, a kompilator ustalił, że rozmiar zmiennej w pliku file1 różni się od rozmiaru zmiennej w pliku2.

Istnieje ważny przypadek, gdy to ostrzeżenie może być emitowane dla języka C++. Jeśli zadeklarowasz typy klas o tej samej nazwie w dwóch różnych plikach, jeśli te deklaracje zawierają funkcje wirtualne, a deklaracje nie są takie same, kompilator może emitować ostrzeżenie C4744 dla tabel funkcji wirtualnych. Ostrzeżenie występuje, ponieważ istnieją dwie tabele funkcji wirtualnych o różnych rozmiarach dla tego samego typu, a konsolidator musi wybrać jedną z nich do uwzględnienia w pliku wykonywalnym. Możliwe, że może to spowodować wywołanie nieprawidłowej funkcji wirtualnej przez program.

Aby rozwiązać to ostrzeżenie, użyj tej samej definicji typu lub użyj różnych nazw dla typów lub zmiennych.

Przykład

Poniższy przykład generuje kod C4743. Aby go skompilować, umieść oba pliki w tym samym folderze, a następnie uruchom to polecenie w wierszu polecenia dewelopera:

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

Plik C4743a.cppźródłowy:

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

Plik C4743b.cppźródłowy:

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

Aby rozwiązać ten problem, zmień nazwę jednej z C klas.