Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.