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 ++