Nel linguaggio C ++, i file di intestazione sono molto importanti. Se stiamo usando alcune parole chiave o metodi integrati di C ++, dobbiamo aggiungere i rispettivi file di intestazione nel nostro codice, altrimenti il compilatore ci darà l'errore. Ora, per capire meglio l'errore, in primo luogo, discuteremo quali sono i file di intestazione e qual è il loro scopo. I file di intestazione sono inclusi nella parte superiore del codice.
I file di intestazione sono proprio come le librerie di importazione, che importa, per usare le loro funzionalità. Questi file a volte agiscono come file di classe che hanno funzioni diverse in essi. I file di intestazione sono necessari per aggiungere per l'utilizzo di quelli. Se proviamo a utilizzare quelle funzioni direttamente e non importare i file di intestazione, otteniamo questo errore. Questo errore si verifica anche quando il compilatore rileva qualsiasi identificatore sconosciuto che ha un tipo di dati noto ma non ha una definizione nota. A volte questo errore si verifica anche se si utilizza un IDE o un compilatore obsoleto.
Questo errore si verifica in diversi tipi che sono i seguenti:
Questa non è una funzione o una libreria integrata. Stiamo piuttosto discutendo che si tratta di un errore e come tutti sappiamo che un errore non ha una sintassi specifica. Questo è il messaggio che il compilatore restituisce quando otteniamo il nostro errore.
Errore: Field 'Parent' ha un tipo incompleto 'A'
Si noti che nel messaggio di errore sopra, le parole chiave "genitore" e "a" non sono statiche. Continuano a cambiare a seconda del codice. Questa cosa sarà compresa dopo aver eseguito gli esempi.
Esempio # 01:
Per avere una migliore comprensione del nostro errore, ora eseguiremo un esempio per ottenere l'errore. Dopodiché, risolveremo l'errore. Per fare ciò, abbiamo dichiarato una classe di nome "Testclass". Nella nostra classe nella sezione modificatore di accesso pubblico, abbiamo creato un oggetto della nostra classe con il nome di "genitore".
Dopodiché, abbiamo creato un puntatore della nostra classe che punta verso il puntatore dell'oggetto della nostra classe. Non stiamo facendo nient'altro né chiamiamo nulla nel metodo principale () o eseguendo alcuna operazione. Questo è l'esempio più semplice che abbiamo cercato di eseguire per farti capire. Ora eseguiremo il nostro codice per vedere i risultati.
#includereAlla compilazione del nostro codice, il sistema ha lanciato l'errore e non lo ha compilato correttamente. Per scoprire il motivo di questo errore, diamo un'occhiata al messaggio di errore. Il messaggio di errore dice che "Field 'Parent' ha un tipo incompleto 'TestClass'". Questo è lo stesso errore di cui stiamo discutendo che è un tipo incompleto che non è consentito. Quindi, il sistema ha mostrato questo errore perché abbiamo un tipo incompleto che ormai non è consentito. Ora risolveremo il nostro errore.
Per risolvere il nostro errore, non abbiamo fatto nulla in più. Abbiamo appena sostituito l'oggetto di Testclass da un semplice oggetto a un puntatore. Ora eseguiremo il nostro codice modificato per osservare come funziona.
Questa volta, il nostro codice ha eseguito correttamente senza alcun errore. Non abbiamo eseguito alcuna operazione nel nostro codice, quindi ha un output vuoto. La causa dell'errore era che stavamo cercando di creare un'istanza dell'oggetto di una classe che non è possibile perché l'abbiamo già usata nel costruttore. In tal caso, il compilatore chiama il codice in modo ricorsivo e diventa infinito ecco perché non è possibile.
Esempio # 02:
Abbiamo già discusso nella nostra parte introduttiva che questo errore può essere causato a causa di molteplici ragioni. Il nostro obiettivo qui è discutere il maggior numero possibile di ragioni. Quindi, per raggiungere il nostro obiettivo, abbiamo eseguito un altro semplice esempio per farti capire l'errore. Per eseguire questo esempio, non abbiamo creato alcuna classe, struttura o funzione o altro. Abbiamo semplicemente chiamato stringstream che viene utilizzato per operare con stringhe come calcolare il numero di parole ecc.
#includereQuesto è l'errore che riceveremo dopo l'esecuzione del nostro codice, il che significa che questa volta, anche il codice non è stato in grado di compilare correttamente. Il messaggio di errore dice che l'aggregato std :: stringstream "obj" ha un tipo incompleto e non può essere definito. Quindi, qui, il messaggio di errore è leggermente diverso da quello precedente. Ma il punto qui è lo stesso: che è un "tipo incompleto". Ma perché questo problema è successo questa volta quando non abbiamo utilizzato una classe? Cercheremo di eliminare l'errore e farlo scopriremo anche il motivo del suo verificarsi.
Abbiamo discusso in precedenza che questo errore si verifica anche se il file di intestazione è mancante nel nostro codice. Quindi, aggiungeremo un file di intestazione che è "sstream" e vedremo cosa succede. Eseguiamo il nostro codice.
Questa volta, il codice viene eseguito correttamente. Il motivo dell'errore era che stavamo usando la funzione Stringstream, ma non stavamo aggiungendo la sua libreria nella sezione dei file di intestazione. Dopo aver aggiunto il suo file di intestazione, il codice è stato eseguito correttamente.
Conclusione
In questa guida, abbiamo discusso di un errore che si verifica durante la codifica in linguaggio C ++: quell'errore è "tipo incompleto". Abbiamo discusso della causa dell'errore e dei modi per eliminare questo errore. Abbiamo anche eseguito esempi che gestiscono diversi scenari per farti capire l'errore. Finalmente, riassumeremo l'intero articolo dicendo che devi assicurarti alcune cose per evitare di ottenere tali errori. Quelle poche cose sono che dobbiamo verificare se abbiamo incluso tutti i file di intestazione richiesti nel nostro codice o no. Verificare che i dati dei dati degli oggetti siano corretti o no. Nella maggior parte dei casi, stiamo usando oggetti semplici, ma il nostro codice richiede di utilizzare i puntatori. Se stiamo facendo una dichiarazione in avanti di qualsiasi struttura o classe nel nostro codice, dobbiamo verificare se la definizione di tale classe o struttura è disponibile nel nostro codice o no.