Avviso del compilatore (livello 1) C4743
'type' ha dimensioni diverse in 'file1' e 'file2': size_1 e size_2 byte
Una variabile esterna a cui si fa riferimento o definita in due file ha tipi diversi in tali file e il compilatore ha determinato che le dimensioni della variabile in file1 differiscono dalle dimensioni della variabile in file2.
Osservazioni:
C'è un caso importante quando questo avviso può essere generato per C++. Se si dichiarano tipi di classe con lo stesso nome in due file diversi, se tali dichiarazioni contengono funzioni virtuali e se le dichiarazioni non sono uguali, il compilatore può generare l'avviso C4744 per le tabelle delle funzioni virtuali. L'avviso si verifica perché sono presenti due tabelle di funzioni virtuali di dimensioni diverse per lo stesso tipo e il linker deve scegliere uno di essi da incorporare nel file eseguibile. È possibile che il programma chiami la funzione virtuale errata.
Per risolvere questo avviso, usare la stessa definizione di tipo o usare nomi diversi per i tipi o le variabili.
Esempio
L'esempio seguente genera l'errore C4743. Per compilarlo, posizionare entrambi i file nella stessa cartella, quindi eseguire questo comando in un prompt dei comandi per sviluppatori:
cl /EHsc /W1 /GL /O2 C4743a.cpp C4743b.cpp
C4743a.cpp
File di origine :
// 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;
C4743b.cpp
File di origine :
// 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() {}
Per risolvere questo problema, rinominare una delle C
classi.