Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pointeur de structures et pointeurs sur pointeurs..

J'y arrive pas !

    12 avril 2006 à 15:51:24

    Bonjour tout le monde !

    J'ai créé un paint, pur m'entrainer avec la SDL, les evenements et les trucs comme ça!
    Mais au bout d'un moment, à force de rajouter des fonction et autre options, je me suis dis qu'il fallait organiser tout ça !
    J'ai donc commencé à ré-écrire mon programme et à mettre les fonction dans un fichier fonction.c.

    Mais j'ai des problemes de pointeurs..
    Dans main.c j'ai:
    CarreCouleur(15, 15, 0, 0, 0, *&carre, *&ecran, &posCarre);
    Qui appelle une fonction CarreCouleur qui est dans fonction.c:
    void CarreCouleur(long x, long y, long rc, long vc, long bc, SDL_Surface **carre, SDL_Surface **ecran, SDL_Rect *posCarre)
    {
        *posCarre.x = x;
        *posCarre.y = y;
        SDL_FillRect(**carre, NULL, SDL_MapRGB(**carre->format, rc, vc, bc));
        SDL_BlitSurface(**carre, NULL, **ecran, *&posCarre);
    }

    'ecran' et 'carre' sont de type SDL_Surface et 'posCarre' de type SDL_Rect.

    Il me sort pas mal d'erreurs..
    8 "fonction.c" request for member `x' in something not a structure or union
    9 "fonction.c" request for member `y' in something not a structure or union
    43 "main.c" [Warning] passing arg 6 of `CarreCouleur' from incompatible pointer type

    43 "main.c" [Warning] passing arg 7 of `CarreCouleur' from incompatible pointer type
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      12 avril 2006 à 16:05:59

      ou ta vu sa toi *&ecran??
      on envoie ou l'adresse du pointeur ecran
      &ecran
      ou la valeur de la variable ou autres choses vers le quel il pointe
      *ecran
      ou sa valeur
      ecran
      • Partager sur Facebook
      • Partager sur Twitter
        12 avril 2006 à 16:14:57

        Relis le chapitre sur les pointeurs, tu n'as rien compris, ça se voit tout de suite. On ne va pas perdre notre temps à t'expliquer alors que les cours de M@teo21 peuvent t'aider !
        • Partager sur Facebook
        • Partager sur Twitter
          12 avril 2006 à 16:24:00

          J'ai réfléchis un peu, et j'ai trouvé ça !
          CarreCouleur(15, 15, 0, 0, 0, **carre, **ecran, &posCarre);
          pour appeller la fonction et :
          void CarreCouleur(long x, long y, long rc, long vc, long bc, SDL_Surface **carre, SDL_Surface **ecran, SDL_Rect *posCarre)
          {
              posCarre->x = x;
              posCarre->y = y;
              SDL_FillRect(**carre, NULL, SDL_MapRGB(**carre->format, rc, vc, bc));
              SDL_BlitSurface(**carre, NULL, **ecran, *&posCarre);
          }
          Comme code de la fonction..

          Mais il y a encore des erreurs, je ne suis pas doué avec les pointeurs ! :p
          • Partager sur Facebook
          • Partager sur Twitter
            12 avril 2006 à 16:40:32

            Citation : guimers8



            J'ai créé un paint, pur m'entrainer avec la SDL, les evenements et les trucs comme ça!
            Mais au bout d'un moment, à force de rajouter des fonction et autre options, je me suis dis qu'il fallait organiser tout ça !
            J'ai donc commencé à ré-écrire mon programme et à mettre les fonction dans un fichier fonction.c.

            Mais j'ai des problemes de pointeurs..


            Je t'invite instamment à lire ce fil.

            http://www.siteduzero.com/forum-83-32114-comment-aller-de-fonction-en-main-et-inversement.html

            Il est absolument essentiel pour la suite de tout développement sérieux.

            Ne pas hésiter à poser des questions.
            • Partager sur Facebook
            • Partager sur Twitter
            Music only !
              12 avril 2006 à 16:52:08

              Ouais, je crois que j'ai compris !
              J'ai presque terminé, je pense (avec mes erreurs)

              Donc pour appeller la fonction je fais:
              CarreCouleur(15, 15, 0, 0, 0, carre, ecran, &posCarre);
              Et le code de la fonction est:
              5 | void CarreCouleur(long x, long y, long rc, long vc, long bc, SDL_Surface *carre, SDL_Surface *ecran, SDL_Rect *posCarre)
              6 | {
              7 |     posCarre->x = x;
              8 |     posCarre->y = y;
              9 |     SDL_FillRect(carre, NULL, SDL_MapRGB(carre->format, rc, vc, bc));
              10|     SDL_BlitSurface(carre, NULL, ecran, *&posCarre);
              11| }

              Plus d'erreurs ! Enfin..presque! Il m'affiche :

              Citation : erreurs

              line 6 | fonction.c | multiple definition of `CarreCouleur'
              line 7 | main.o(.text+0x0):fonction.c | first defined here

              • Partager sur Facebook
              • Partager sur Twitter
                12 avril 2006 à 17:31:09

                *&posCarre : *soupir*
                • Partager sur Facebook
                • Partager sur Twitter
                  12 avril 2006 à 18:02:19

                  Désolé mais je comprend pas tout ! :(
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    12 avril 2006 à 19:01:14

                    Citation


                    Désolé mais je comprend pas tout ! :(


                    Va relire le cours sur les pointeurs, ce sera clair après :)

                    *&posCarre


                    La fonction SDL_BlitSurface() prend en 4e paramètre un pointeur vers un rect.
                    Or, "posCarre" est effectivement un pointeur vers un rect. Donc pas besoin d'étoiles ou de '&' ! 'posCarre' suffit a lui tout seul puisqu'il est du même type que ce que BlitSurface attend en 4e paramètre.

                    Explications : Avec ton '*&', je suppose tu essaies d'obtenir le résultat suivant :

                    Je prends l'objet vers lequel pointe le pointeur (signe *), puis je récupère l'adresse de cet objet (signe &), et je donne le tout a BlitSurface.
                    (C'est apparment ce que tu as voulu faire ?).
                    Mais, si tu réfléchis bien, le contenu du pointeur posCarre, c'est effectivement l'adresse de l'objet pointé. Donc ce que tu fait ne sert a rien. (En espérant que ce soit clair :p )

                    Ensuite, pour ton erreur, il suffit de traduire l'Anglais et on comprend qu'autour des lignes 6 et 7 de fonctions.c, tu devrais avoir un problème avec la définition de carreCouleur (probablement elle a été définie 2 fois). Vérifie ton code autour de cette zone la.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 avril 2006 à 19:42:33

                      D'accord, j'etait parvenu à trouver finalement le "posCarre" sous cette forme.
                      Mais il re-sort EXACTEMENT la meme erreur. Et j'ai donné les lignes concernées par celle-ci, le fichier ne contient que ça pour l'instant.

                      Alors maintenant, ou est l'erreur ?

                      EDIT: Okay ! C'est bon ! J'ai trouvé !

                      Le probleme etait que 'carre' valait NULL et il y avait un probleme de linkage.
                      Donc, c'est bon Merçi tout le monde !
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Pointeur de structures et pointeurs sur pointeurs..

                      × 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