Erreur C ++ Erreur de type incomplet non autorisé

Erreur C ++ Erreur de type incomplet non autorisé
Dans ce guide, nous discuterons d'une autre erreur qui se produit lors de la programmation ou du codage dans le langage C ++. Cette erreur est «un type incomplet n'est pas autorisé». Nous discuterons de la raison pour laquelle cette erreur se produit et les raisons qui le sont. Puisqu'il s'agit d'un bogue de compilation, il se produit juste avant l'exécution du code. Nous découvrirons également la solution à l'erreur et la résoudre.

Dans la langue C ++, les fichiers d'en-tête sont très importants. Si nous utilisons des mots clés ou des méthodes intégrées de C ++, nous devons avoir à ajouter leurs fichiers d'en-tête respectifs dans notre code, sinon le compilateur nous donnera l'erreur. Maintenant, pour mieux comprendre l'erreur, nous discuterons d'abord de ce que sont les fichiers d'en-tête et quel est leur objectif. Les fichiers d'en-tête sont inclus en haut du code.

Les fichiers d'en-tête sont comme des bibliothèques d'importation, que nous importons, pour utiliser leurs fonctionnalités. Ces fichiers agissent parfois comme des fichiers de classe qui ont des fonctions différentes. Des fichiers d'en-tête sont nécessaires à ajouter pour l'utilisation. Si nous essayons d'utiliser ces fonctions directement et n'importons pas les fichiers d'en-tête, nous obtenons cette erreur. Cette erreur se produit également lorsque le compilateur détecte tout identifiant inconnu qui a un type de données connu mais n'a pas de définition connue. Parfois, cette erreur se produit également si vous utilisez un IDE ou un compilateur obsolète.

Cette erreur se produit dans différents types qui sont les suivantes:

  1. Le type incomplet n'est pas autorisé
  2. brise Le type incomplet n'est pas autorisé
  3. ifstream Le type incomplet n'est pas autorisé

Syntaxe:

Ce n'est pas une fonction ou une bibliothèque intégrée. Nous discutons plutôt que c'est une erreur et comme nous savons tous qu'une erreur n'a pas de syntaxe spécifique. C'est le message que le compilateur renvoie lorsque nous obtenons notre erreur.

Erreur: le champ «parent» a un type incomplet «a»

Notez que dans le message d'erreur ci-dessus, les mots clés «parent» et «a» ne sont pas statiques. Ils continuent de changer en fonction de votre code. Cette chose sera comprise après avoir effectué les exemples.

Exemple # 01:

Pour mieux comprendre notre erreur, nous allons maintenant effectuer un exemple pour obtenir l'erreur. Après cela, nous résoudrons l'erreur. Pour ce faire, nous avons déclaré une classe du nom de «TestClass». Dans notre classe dans la section du modificateur d'accès public, nous avons créé un objet de notre classe par le nom de «Parent».

Après cela, nous avons créé un pointeur de notre classe qui pointe vers le pointeur de l'objet de notre classe. Nous ne faisons rien d'autre et nous appelons quoi que ce soit dans la méthode principale () ou effectuons une opération. C'est l'exemple le plus simple que nous ayons essayé de jouer pour vous faire comprendre. Maintenant, nous allons exécuter notre code pour voir les résultats.

#inclure
Utilisation de Namespace Std;
classe de test de classe

public:
TestClass Parent; / * Pour résoudre l'erreur: TestClass * parent; * /
TestClass (TestClass * PTR): Parent (* PTR)


;
int main ()

En compilation de notre code, le système a lancé l'erreur et n'a pas réussi à compiller. Pour découvrir la raison de cette erreur, regardons le message d'erreur. Le message d'erreur indique que «le champ« parent »a un type incomplet« TestClass »». C'est la même erreur que nous discutons qui est un type incomplet qui n'est pas autorisé. Ainsi, le système a montré cette erreur parce que nous avons un type incomplet que nous savons maintenant n'est pas autorisé. Maintenant, nous allons résoudre notre erreur.

Pour résoudre notre erreur, nous n'avons rien fait de plus. Nous venons de remplacer l'objet de TestClass d'un objet simple à un pointeur. Nous allons maintenant exécuter notre code modifié pour observer comment cela fonctionne.

Cette fois, notre code s'est exécuté avec succès sans donner d'erreur. Nous n'avons effectué aucune opération dans notre code, il a donc une sortie vierge. La cause de l'erreur était que nous essayions de créer une instance de l'objet d'une classe qui n'est pas possible car nous l'avons déjà utilisé dans le constructeur. Dans ce cas, le compilateur appelle le code récursivement et il devient infini, c'est pourquoi il n'est pas possible.

Exemple # 02:

Nous avons déjà discuté dans notre partie d'introduction que cette erreur peut être causée pour des raisons multiples. Notre objectif ici est de discuter du plus de raisons que possible. Donc, pour atteindre notre objectif, nous avons effectué un autre exemple simple pour vous faire comprendre l'erreur. Pour effectuer cet exemple, nous n'avons créé aucune classe, structure ou fonction, ni quoi que ce soit. Nous avons simplement appelé Stringstream qui est utilisé pour fonctionner avec des chaînes telles que le calcul du nombre de mots, etc.

#inclure
Utilisation de Namespace Std;
int main()

Std :: Stringstream obj;
retour 0;

C'est l'erreur que nous obtiendrons après l'exécution de notre code, ce qui signifie que cette fois, le code n'a pas non plus été en mesure de compiler avec succès. Le message d'erreur indique que Gagregat Std :: StringStream «Obj» a un type incomplet et ne peut pas être défini. Donc, ici, le message d'erreur est légèrement différent de la précédente. Mais le point ici est le même: qu'il s'agit d'un «type incomplet». Mais pourquoi ce problème s'est-il produit cette fois où nous n'avons pas utilisé de classe? Nous essaierons d'éliminer l'erreur et, ce faisant, nous découvrirons également la raison de sa présence.

Nous avons discuté plus tôt que cette erreur se produit également si le fichier d'en-tête est manquant dans notre code. Donc, nous ajouterons un fichier d'en-tête qui est «sstream» et voir ce qui se passe. Exécutons notre code.

Cette fois, le code est exécuté avec succès. La raison de l'erreur était que nous utilisions la fonction Stringstream, mais nous n'avons pas ajouté sa bibliothèque dans la section des fichiers d'en-tête. Après avoir ajouté son fichier d'en-tête, le code a exécuté avec succès.

Conclusion

Dans ce guide, nous avons discuté d'une erreur qui se produit lors du codage dans le langage C ++: cette erreur est «type incomplet». Nous avons discuté de la cause de l'erreur et des moyens d'éliminer cette erreur. Nous avons également effectué des exemples gérant différents scénarios pour vous faire comprendre l'erreur. Enfin, nous résumerons l'intégralité de l'article en disant que vous devez vous assurer de quelques choses pour éviter d'obtenir de telles erreurs. Ces quelques choses sont que nous devons vérifier si nous avons inclus tous les fichiers d'en-tête requis dans notre code ou non. Vérifiez que les données des objets sont correctes ou non. Dans la plupart des cas, nous utilisons des objets simples, mais notre code nécessite d'utiliser des pointeurs. Si nous faisons une déclaration avant de toute structure ou classe dans notre code, nous devons vérifier si la définition de cette classe ou structure est disponible dans notre code ou non.