problemed'envoi et de reception à une fonction

problemed'envoi et de reception à une fonction - C - Programmation

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é

Reply

Marsh Posté le 06-09-2008 à 17:11:13   

Reply

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.
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);
}


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*):
 
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;
 
* C:\Users\xavier\heenok\main.c|1184|error: `variable' was not declared in this scope|


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


Message édité par Sve@r le 06-09-2008 à 20:26:36

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

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).

Reply

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).
 
 
 
 

Reply

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):

Code :
  1. for(i = 0; i < 16; i++)
  2.     {
  3.         ensemble.positionChienr[i].x = 100;
  4.         ensemble.positionChienr[i].y = 100;
  5.     }
  6.     ensemble.positionChienr[0].x = 200;
  7.     ensemble.positionChienr[0].y = 400;
  8.     ensemble.variable = 0;



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):

Code :
  1. while(ensemble.positionChienr[15].x != 350)
  2.         {
  3.         timer = SDL_AddTimer(1000, animChienr, &ensemble);
  4.         }


Et enfin ma fonction animChienr:

Code :
  1. Uint32 animChienr(Uint32 intervalle, void *parametre)
  2. {
  3.    /* Conversion de void* en SDL_Rect* */
  4.    struct PourChienr *ensemble = (struct PourChienr*)parametre;
  5.    if (ensemble != NULL)
  6.    {
  7.       ensemble->positionChienr[ensemble->variable].x = 100;
  8.       ensemble->positionChienr[ensemble->variable].y = 100;
  9.       ensemble->variable ++;
  10.       ensemble->positionChienr[ensemble->variable].x = 200 + ensemble->variable * 10;
  11.       ensemble->positionChienr[ensemble->variable].y = 400;
  12.    }
  13.    return intervalle;
  14. }



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


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed