Mon message restrictif concernant l'interdiction d'inclure include Player.h, Ball.h, Map.h dans simulation.h concerne les projets qui ont un module simulation SANS classe Simulation. Un tel module n'a besoin d'exporter que des fonctions à l'extérieur du module, ce qui justifie cette interdiction.
Si vous avez développé une classe Simulation, il est normal que l'interface du module contienne l'interface de la classe Simulation qui elle-même a le droit d'avoir des attributs liés aux types Player, Ball, Map... DONC dans ce contexte c'est normal et autorisé d'aussi inclure les interface Player.h, Ball.h map.h si on ne peut pas faire autrement (sinon ça ne compile pas).
Cela dit, pour revenir à la donnée:
-> seules des méthodes de la classe simulation peuvent être utilisées dans projet et dans gui.
-> on ne peut pas créer des variables ou avoir des paramètres de type Player, Ball, Map ( ou Obstacle) dans projet et gui.
----------- Le message précédent concerne ceux qui ont écrit un module simulation SANS classe Simulation --------
----------- dans ce cas le module simulation est un module "à-la-C" qui exporte seulement des fonctions ------------
ce message donnait déjà la réponse:
https://moodlearchive.epfl.ch/2018-2019/mod/forum/discuss.php?d=16463&parent=32568
votre fichier simulation.h ne doit pas contenir player.h, ball.h ni map.h (ou obstacle.h si vous avez choisi ce nom) car cela introduit une dépendance vis à vis de ces modules player, ball, et map partout où vous faites l'include de simulation.h. Normalement ni projet.cc ni gui.cc ne doivent connaiître ni utiliser les types Player, Ball, Map (ou Obstacle).
je cite la donnée:
le module simulation est le seul module dont on peut appeler des fonctions en dehors du Modèle (Fig 9).
Seule votre implémentation simulation.cc peut faire l'include de player.h, ball.h ni map.h
Selon l'architecture indiquée par la donnée, le module gui peut aussi travailler avec des entités génériques de plus bas niveau tels que POINT, CERCLE ou CARRE qui peuvent être définis dans le module utilitaire tools. L'interface de tools.h peut être utilisée par gui.cc
https://moodlearchive.epfl.ch/2018-2019/mod/resource/view.php?id=1013833
Par ailleurs, votre morceau de code viole l'encapsulation du module simulation en montrant l'attribut players à l'extérieur du module simulation. Il est formellement interdit de rendre des attributs publics, même s'il s'agit d'attribut de classe (static).
Que peut-on faire dans le cadre de l'architecture indiquée par la donnée: le module simulation a le droit de fournir des getters pour les nombres de cellules, de Player, Ball, Obstacles. De même il peut fournir des données des types de bas-niveau tel que le CERCLE correspondant à un Player d'indice i. De même qu'il peut founir les indices ligne/colonne d'un obstacle, ou un CARRE. le module gui est responsable de son coté de convertir les coordonées du jeu en coordonnées GTK pour l'affichage.