6
votes

C ++ circulaire incluent

Je ne peux pas résoudre ce problème de dépendance circulaire; Toujours obtenir cette erreur: "Utilisation non valide de type Gemsgame de type incomplet" Je ne sais pas pourquoi le compilateur ne connaît pas la déclaration de Gemsgame même si j'inclus Gemsgame.h Les deux classes dépendent l'une de l'autre (gemmesGame Store un vecteur de gémelements et des gemelements doivent accéder à ce même vecteur)

Voici un code partiel de gemelement.h: xxx

... et de gemsgame.h: xxx


1 commentaires

Si vous avez une déclaration en avant, vous ne devriez pas l'inclure également. Et de ce que vous avez montré, les deux n'ont besoin que d'une déclaration en avant.


4 Réponses :


2
votes

Si votre déférence, le pointeur et la fonction est en ligne, vous aurez besoin du type complet. Si vous créez un fichier CPP pour la mise en œuvre, vous pouvez éviter la dépendance circulaire (car aucune des catégories ne devra inclure les autres .h dans leurs en-têtes)

quelque chose comme ceci:

Votre en-tête: xxx

votre CPP: xxx


0 commentaires

3
votes

Supprimer les directives #include , vous avez déjà les classes déclarées déclarées.

Si votre classe A a besoin, dans sa définition, de savoir quelque chose sur les détails de la classe B, vous devez inclure l'en-tête de la classe B. Si la classe A n'a besoin que de savoir que la classe B existe, par exemple lorsque la classe A détient uniquement un pointeur sur des instances de classe B, il suffit de transmettre - déclarer, et dans ce cas, un #include n'est pas nécessaire.


0 commentaires

1
votes

Deux façons de sortir:

  1. garder les classes dépendantes dans le même fichier h
  2. Tournez la dépendance à des interfaces abstraites: Gemelement Mise en œuvre d'iGEMElement et attente pour iGemSgame et Gemsgame implémentant iGemsgame et contenant un vecteur de pointeurs d'igemElement.

0 commentaires