problemed'envoi et de reception à une fonction - C - Programmation
Marsh Posté le 06-09-2008 à 20:25:18
jaco3th a écrit : Bonjour, j'ai essayé de créer une structure afin que mon timer l'envoie à une fonction, mais je n'ai pas réussi. |
Non. Ta variable ne se nomme pas "PourChienr". Ce token identifie ton nom de structure.
Te faut:
1) déclarer une variable de type "struct PourChienr"
2) passer cette variable via son adresse à ta fonction
Si t'avais pris la peine d'identifier ton nom de structure par "s_xxx" comme c'est assez couramment conseillé, t'aurais pas fait l'erreur !!!
jaco3th a écrit : Et enfin ma fonction(2eme erreur*): |
Quel est le mot que t'as pas compris dans le texte suivant:
`variable' was not declared in this scope
Est-ce "variable", "scope" ou simplement "declared" ???
jaco3th a écrit : ps: desolé pour les balises, je n'ai pas trouvé |
Mot clef "code=cpp" ou simplement "cpp" entre crochets et "/code" ou "/cpp" à la fin
Marsh Posté le 06-09-2008 à 23:10:05
Merci beaucoup, je vais revoir tout ça au clair demain (c'est la premiere fois que j'utilise une structure personnelle, je suis ultra novice).
Marsh Posté le 08-09-2008 à 14:10:01
Bon, je vous mets la où j'en suis, on sait jamais...
j'ai 21 erreurs;
ma declaration (dans ma fonction principale):
[cpp]struct PourChienr
{
SDL_Rect positionChienr[16];
long variable;
};/cpp
et:
[cpp] struct PourChienr ensemble;
/cpp
Ensuite mes initialisation (toujours dans ma fonction principale):
[cpp] for(i = 0; i < 16; i++)
{
ensemble.positionChienr[i].x = 100;
ensemble.positionChienr[i].y = 100;
}
ensemble.positionChienr[0].x = 200;
ensemble.positionChienr[0].y = 400;
ensemble.variable = 0;
/cpp
mon timer (encore dans ma fonction principale):
[cpp]while(ensemble.positionChienr[15].x != 350)
{
timer = SDL_AddTimer(1000, animChienr, &ensemble);
}
/cpp
Et enfin ma fonction animChienr:
[cpp] Uint32 animChienr(Uint32 intervalle, void *parametre)
{
/* Conversion de void* en SDL_Rect* */
struct PourChienr *ensemble = (struct PourChienr*)parametre;
if (ensemble != NULL)
{
ensemble->positionChienr[ensemble->variable].x = 100;
ensemble->positionChienr[ensemble->variable].y = 100;
ensemble->variable ++;
ensemble->positionChienr[ensemble->variable].x = 200 + ensemble->variable * 10;
ensemble->positionChienr[ensemble->variable].y = 400;
}
return intervalle;
}
/cpp
Je suis à bout de nerfs lol(jaune).
Marsh Posté le 10-09-2008 à 21:54:17
Quand j'ai dit "/cpp" à la fin, je pensais que t'aurais compris qu'il faut aussi des crochets (comme au début)...
jaco3th a écrit : Ensuite mes initialisation (toujours dans ma fonction principale):
|
Pourquoi faire démarrer "i" à 0 alors que tu vas initialiser ensuite "ensemble.positionChienr[0]" ???
jaco3th a écrit : mon timer (encore dans ma fonction principale):
|
Pourquoi "parametre" est "void *" ? Il pourrait pas être simplement "struct pourChienr *" ??? Et où est défini "intervalle" ???
jaco3th a écrit : j'ai 21 erreurs; |
C'est très souvent la première qui entraine les autres => le compilo bloque sur un truc et là, il part dans les choux et trouve des erreurs sur tout le reste. Donne la première erreur car en le lisant simplement, ton code me semble bon (sauf en ce qui concerne la variable "intervalle" )...
jaco3th a écrit : c'est la premiere fois que j'utilise une structure personnelle, je suis ultra novice |
bah tu te débrouilles bien. T'as bien pigé le principe du "->" et tu sais quand mettre "->" et quand mettre ".". C'est pas mal !!!
Marsh Posté le 10-09-2008 à 22:25:17
Merci Sve@r, finalement j'ai utilisé SDL_GetTicks, quand à la fonction, j'ai trouvé ce prototype sur un site qui montrait comment utiliser les timers.
Marsh Posté le 06-09-2008 à 17:11:13
Bonjour, j'ai essayé de créer une structure afin que mon timer l'envoie à une fonction, mais je n'ai pas réussi.
Pouvez-vous me dire ce qui ne vas pas svp?
Dans ma fonction principale, j'ai voila comment j'ai déclaré ma structure (ces sous-variables existent deja):
struct PourChienr
{
SDL_Rect positionChienr[16];
long variable;
};
Ensuite, (premiere erreur*) voila mon timer:
while(positionChienr[15].x != 350)
{
timer = SDL_AddTimer(1000, animChienr, &PourChienr);
}
*C:\Users\xavier\heenok\main.c|318|error: expected primary-expression before ')' token|
Et enfin ma fonction(2eme erreur*):
Uint32 animChienr(Uint32 intervalle, void *parametre)
{
SDL_Rect* positionChienr = (SDL_Rect*)parametre;
/* Conversion de void* en SDL_Rect* */
positionChienr[variable].x = 100;
positionChienr[variable].y = 100;
variable ++;
positionChienr[variable].x = 200 + variable * 10;
positionChienr[variable].y = 400;
return intervalle;
}
* C:\Users\xavier\heenok\main.c|1184|error: `variable' was not declared in this scope|
ps: desolé pour les balises, je n'ai pas trouvé