
Envoyé par
Novocaine
J'ai fait un tour sur le lien que tu m'as envoyé....cependant il ne repond pas trop a mon probleme.
Il était en réponse à zooro qui semblait ignorer la notion de données opaques... Il faut lire correctement les citations...
Lorsque tu dis qu'il faudrait prevoir une fonction adequat, je bute toujours sur la meme chose:
Si j'ecris la definition de la fonction dans mon .h et que je fais apparaitre dans les arguments une struct non-declaré, il va se planter a la compilation.
De meme si je cree un nouveau module,...
Et si je place une fonction qui retourne les valeurs de ma structure ENEMY, il me faut l'addresse du debut de la chaine, ce qui signifie un argumenent de type pointeur sur structure et donc je me retrouve dans la meme impasse.
Bien sûr. Les types opaques ne fonctionnent qu'avec des pointeurs simples (pas de **) et ne peuvent être déréférencés hors de leur implémentation.
Il est cependant possible de créer une fonction 'à-part' nommé
1 2 3 4
|
collision (PROJECTILE *p_proj, ENEMY *p_enem)
{
} |
précédée de #include "projectile.h" et de #include "ennemy.h"
qui fasse en gros ceci :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
struct xy
{
int x;
int y;
};
struct xy xy_proj;
struct xy xy_enem;
projectile_get_xy (p_proj, &xy_proj.x, &xy_proj.y);
enemy_get_xy (p_enem, &xy_enem.x, &xy_enem.y);
if (xy_proj.x == xy_enem.x && xy_proj.y == xy_enem.y)
{
/* boum */
} |
Ne reste plus qu'à ajouter
projectile_get_xy (PROJECTILE *self, int *px, int *py);
et
enemy_get_xy (ENEMY *self, int *px, int *py);
aux objets opaques respectifs. Je ne vois pas trop où est le problème.
NOTA : l'objet struct xy (disons XY pour rester dans ta terminologie) pourrait être un objet commun (non opaque) aux 2 objets ENNEMY et PROJECTILE, ce qui permettrait de faire ceci :
projectile_get_xy (PROJECTILE *self, XY *p_xy);
et
enemy_get_xy (ENEMY *self, XY *p_xy);
Partager