Partage
  • Partager sur Facebook
  • Partager sur Twitter

fonction callback en c++

problème de conversion

Sujet résolu
    15 juin 2007 à 16:53:15

    Bonjours à tous,
    bon mon problème est plutôt original, puisque en fait je l'ai résolue...
    Je m'explique....
    Je suis en train de suivre le cours de matheo sur les timer.
    J'ai juste fait un morceau de code qui permet de déplacer un petit carrée sur l'écrant grace à un timer et donc a une fonction callback.
    Le problème se trouve ds la fonction :

    Uint32 bouge(Uint32 intervalle, void *parametre)
    {
        SDL_Rect *position = parametre;
        position->x ++;
        return intervalle;
    }

    A la compilation, le compilateur bloque, il ne comprend pas SDL_Rect *position = parametre, pour lui c'est une convertion invalide.

    Je ne comprenais pas, c'était pourtannt le meme code que matheo... Mes recherche sur le forum mon fait comprendre que cela venait du fait que j'était en C++...

    Par le pure des hasard j'ai remplacé mon code problématique par
    Uint32 bouge(Uint32 intervalle, void *parametre)
    {
        SDL_Rect *position=(SDL_Rect*)parametre;
        position->x ++;
        return intervalle;
    }

    et par un miracle absolue c'a marche.
    J'ai récupéré cette instuction sur le forum, et je n'est aucune idée de pourquoi ça marche...
    pouriez vous me l'expliquer ???

    Merci d'avance a tous.
    Bonne journée
    • Partager sur Facebook
    • Partager sur Twitter
      15 juin 2007 à 17:20:27

      Bah en fait c'est tout simple. En C, tu n'aurais pas eu ce problème parce que le C est laxiste sur ce point-là. Mais en C++, il FAUT absolument, lors d'une affectation, que les types correspondent (il y a peut-être une exception par exemple dans la conversion d'un float à un entier, je sais plus), en tout cas pour les autres types, tu dois explicitement convertir dans le type de la variable à laquelle tu affectes une valeur.

      En l'occurrence, le type de "parametre" est "void *" et le type de "position" est "SDL_Rect*" ce sont peut-^etre deux pointeurs, et le type "void *" est peut-être générique, seulement en C++ on ne peut pas faie ce genre d'affectation alors que les types de correspondent pas il faut donc faire un cast, et le cast consiste à mettre le type dans lequel onveut convertir une variable entre parenthèse devant la variable à convertir, c'est ce que tu fais là.
      • Partager sur Facebook
      • Partager sur Twitter
        15 juin 2007 à 19:36:34

        Ok, merci c'est toujours bon a savoir.
        Bonne soirée....
        • Partager sur Facebook
        • Partager sur Twitter
          15 juin 2007 à 22:40:04

          Pour info, par pur style, tu peux remplacer le (SDL_Rect *) par static_cast<SDL_Rect *>(ta_variable_a_caster).
          ++
          • Partager sur Facebook
          • Partager sur Twitter

          fonction callback en c++

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown