Veuillez considérer les trois fichiers simplifiés suivants: cours.h: p> et main.cpp: p> Merci d'avance, Vlad. P> Mise à jour: strong>
Merci pour des réponses rapides. Déclaration en avant de
étudiant.h:
Cela ne compilerait pas me donner
Erreur C2146: Erreur de syntaxe: manquant ';'; Avant l'identifiant 'Somrestudent' Strong>
Il produirait beaucoup plus d'erreurs (même pour les bonnes portions du code) dans un programme plus compliqué. Je suppose que le design est faux: étudiant code> inclut cours code> et cours code> inclut étudiant code>. Ce que je veux représenter, c'est qu'un étudiant prend plusieurs cours et un cours a plusieurs élèves (j'utilise des vecteurs dans un programme complet, les évitées ici pour la simplicité). Tout conseil en quoi cela serait possible? P> Étudiant Code> Classe dans Course de cours Code> Classe (et supprimer #include "Student.h" code>) semble faire le travail.
Désolé, je pensais que cela n'aurait pas d'importance ici, mais j'utilise en fait des vecteurs des indicateurs de const dans chacun d'eux (puisqu'un étudiant ne devrait pas être en mesure de contrôler un parcours code> et un et un Cours code> ne devrait pas être capable de contrôler un «code> étudiant code>), comme suit: p>
4 Réponses :
Vous ne pouvez pas faire cela, vous devez convertir le moins l'un d'entre eux en un pointeur. P>
Cela se passe circulaire, tant que vous déclarez Vous devez donc casser ce cercle, en déclarant au moins un d'entre eux comme pointeur em>. Par exemple, vous pouvez le faire: p> Notez également que lorsque vous déclarez La raison pour laquelle cela fonctionne parce que la taille du pointeur de Toute classe est la même et le compilateur n'a pas besoin de connaître la taille de la classe, afin de connaître la taille du pointeur em> de la même classe. En d'autres termes, la compilée peut savoir SOMECourse code> et Somrestudent code> en tant que membre non-pointeur de classe étudiant code> et cours code> respectivement (comme vous l'avez fait), car le compilateur voit la définition de étudiant code>, il doit connaître sa taille qui signifie à son tour, il doit connaître la taille de ses membres , y compris cours code> qui est l'un d'entre eux. Mais pour connaître la taille du cours code>, il doit connaître la taille de étudiant code>. Cela devient circulaire. psomécours code> comme pointeur de type cours * code> , vous n'avez pas besoin d'inclure le fichier d'en-tête dans lequel cours code> est défini. Juste avant la déclaration de la classe le cours code> suffit, comme je l'ai fait dans le code ci-dessus. P> tailleof (cours *) code> sans même savoir Tailleof (cours) code>. P> P> P>
Si vous souhaitez relier deux classes, vous devrez utiliser la déclaration avant et un pointeur à une instance du type déclaré dans l'une des interfaces de classe. Une autre interface peut rester la même que tant qu'il comprend la déclaration de l'interface de type de variable de membre.
cours.h: p> étudiant.h: p> < Pré> xxx pré> p>
En plus de Nawaz Réponse: P>
Si vous souhaitez accéder aux membres bien sûr des membres de l'étudiant, vous devez inclure le cours.h dans le fichier .CPP - dossier où vous définissez les méthodes d'étudiant. P>
avec g ++ Vous obtiendrez une erreur comme "Utilisation non valide du type incomplet" sinon. P>
Dupliqué possible de Dépendance circulaire dans C ++