Partage
  • Partager sur Facebook
  • Partager sur Twitter

[TP Mario] Problème à la compilation

Je comprends vraiment pas ...

    18 avril 2006 à 20:08:16

    Donc j'ai codé le tp mario sokoban et je pense avoir bien compris ce tp et le codage du jeu. J'ai fini de taper le code et quand je compile code::blocks me sort cette erreur :
    two or more data types in declaration of 'chargerNiveau'

    Je comprends pas vraiment ce qu'il veut me dire : j'ai trop de types ? pas assez ? Comprends pas ! o_O

    Bon voici mon code de chargerNiveau :
    int chargerNiveau(int niveau[][NB_BLOCS_HAUTEUR])
    {
        FILE* fichier = NULL;
        char ligneFichier[NB_BLOCS_LARGEUR*NB_BLOCS_HAUTEUR + 1] = {0};
        int i=0, j=0;

        fichier = fopen("niveaux.lvl", "r");

        //Test d'erreur
        if (fichier == NULL)
            return 0;

        fgets(ligneFichier, NB_BLOCS_LARGEUR*NB_BLOCS_HAUTEUR + 1, fichier);

        //Récupération des cases
        for (i = 0 ; i < NB_BLOCS_HAUTEUR ; i++)
        {
            for (j = 0 ; j < NB_BLOCS_LARGEUR ; j++)
            {
                switch (ligneFichier[(i * NB_BLOCS_LARGEUR) + j])
                {
                    case '0':
                        niveau[j][i] = 0;
                        break;
                    case '1':
                        niveau[j][i] = 1;
                        break;
                    case '2':
                        niveau[j][i] = 2;
                        break;
                    case '3':
                        niveau[j][i] = 3;
                        break;
                    case '4':
                        niveau[j][i] = 4;
                        break;
                }
            }
        }

        fclose(fichier);
        return 1;
    }


    Voilà merci ! ;)
    • Partager sur Facebook
    • Partager sur Twitter
      19 avril 2006 à 11:16:24

      Bonjour,

      A 1ère vue ,
          //Test d'erreur
          if (fichier == NULL)
              return 0;

      o_O ???????????????????? o_O

      Ca ne devrais pas être ça :
          //Test d'erreur
        if (fichier == NULL)
         {
          MessageBox (0, "Erreur ! ...", "Erreur", MB_ICONERROR);
          return EXIT_FAILURE;
         }

      A++ ;)
      • Partager sur Facebook
      • Partager sur Twitter
        19 avril 2006 à 11:20:42

        je ne conaissais pas Messagebox ... pis j'ai codé comme dans le tp de M@téo. Et je ne vois pas vraiment si ça a un rapport avec 'two or more ...'
        • Partager sur Facebook
        • Partager sur Twitter
          19 avril 2006 à 11:22:58

          Laisse tomber MessageBox c'est API Win32 on s'en fout.
          Tu peux montrer les quelques lignes avant l'implémentation de chargerNiveau ?
          Et si tu déclares chargerNiveau AVANT, montre le nous (ainsi que les qqlignes avant/après).
          • Partager sur Facebook
          • Partager sur Twitter
            19 avril 2006 à 11:28:46

            Utilise les pointeurs quand tu veux faire passer un tableau en entier et pas seulement une valeur d'un tableau.
            • Partager sur Facebook
            • Partager sur Twitter
              19 avril 2006 à 11:31:50

              Citation : loacast

              Utilise les pointeurs quand tu veux faire passer un tableau en entier et pas seulement une valeur d'un tableau.



              Il utilise ici la fonction de M@teo qui marche très bien. Je pense que le problème n'est pas dans le code qu'il a donné mais dans les environs.
              • Partager sur Facebook
              • Partager sur Twitter
                19 avril 2006 à 11:32:40

                Bon alors, j'avais pas inclus mes headers dans les sources mais là c'est fait, mais j'ai toujours l'erreur :

                Mon code de fichiers.c :
                /*
                fichiers.c
                ----------------------
                Créé par Pierre
                le 18/04/2006

                Modifiée le 18/04/2006

                Rôle : enregistrement et chargement de niveau
                */


                #include <stdlib.h>
                #include <stdio.h>
                #include <SDL/SDL.h>
                #include <SDL/SDL_image.h>

                #include "constantes.h"

                int chargerNiveau(int niveau[][NB_BLOCS_HAUTEUR])
                {
                    FILE* fichier = NULL;
                    char ligneFichier[NB_BLOCS_LARGEUR*NB_BLOCS_HAUTEUR + 1] = {0};
                    int i=0, j=0;

                    fichier = fopen("niveaux.lvl", "r");

                    //Test d'erreur
                    if (fichier == NULL)
                        return 0;

                    fgets(ligneFichier, NB_BLOCS_LARGEUR*NB_BLOCS_HAUTEUR + 1, fichier);

                    //Récupération des cases
                    for (i = 0 ; i < NB_BLOCS_HAUTEUR ; i++)
                    {
                        for (j = 0 ; j < NB_BLOCS_LARGEUR ; j++)
                        {
                            switch (ligneFichier[(i * NB_BLOCS_LARGEUR) + j])
                            {
                                case '0':
                                    niveau[j][i] = 0;
                                    break;
                                case '1':
                                    niveau[j][i] = 1;
                                    break;
                                case '2':
                                    niveau[j][i] = 2;
                                    break;
                                case '3':
                                    niveau[j][i] = 3;
                                    break;
                                case '4':
                                    niveau[j][i] = 4;
                                    break;
                            }
                        }
                    }

                    fclose(fichier);
                    return 1;
                }

                int sauvegarderNiveau(int niveau[][NB_BLOCS_HAUTEUR])
                {
                    FILE* fichier = NULL;
                    int i = 0, j = 0;

                    fichier = fopen("niveaux.lvl", "w");
                    if (fichier == NULL)
                        return 0;

                    for (i = 0 ; i < NB_BLOCS_HAUTEUR ; i++)
                    {
                        for (j = 0 ; j < NB_BLOCS_LARGEUR ; j++)
                        {
                            fprintf(fichier, "%d", niveau[j][i]);
                        }
                    }

                    fclose(fichier);
                    return 1;
                }


                Et celui de fichiers.h :
                /*
                fichiers.h
                -----------------
                voir fichiers.c
                */


                int chargerNiveau(int niveau[][NB_BLOCS_HAUTEUR]);
                int sauvegarderNiveau(int niveau[][NB_BLOCS_HAUTEUR]);
                • Partager sur Facebook
                • Partager sur Twitter
                  19 avril 2006 à 12:45:18

                  Tu as oublié les acolades après le 'if' :
                      if (fichier == NULL)
                         {
                          return 0;
                         }
                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 avril 2006 à 12:45:51

                    moi non plus j'arrive pas a compiller c pas juste :'(
                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 avril 2006 à 12:47:05

                      PianoPâriss arrete s'il te plait avec tes conseils foireux meme si tu le fais pas expres.
                      Pas besoin d'accolades quand il n'y a qu'une instruction après.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 avril 2006 à 13:06:24

                        Kayl ==> J'avais oublié, et tu pourrais être un petit peux plus gentil :colere:
                        • Partager sur Facebook
                        • Partager sur Twitter
                          19 avril 2006 à 13:09:59

                          regarde au niveau de la premiere ligne de ta fonction : tu as un double tableau niveau[][NB_BLOCS_HAUTEUR]
                          faudrait pas mettre une valeur entre les premiers crochets ?
                          essaye, j'ai deja eu des probblemes à cause de ça
                          • Partager sur Facebook
                          • Partager sur Twitter
                            19 avril 2006 à 13:18:33

                            nan vu que c'est de la déclaration pas besoin de valeur normalement ! ^^
                            Néanmoins, Matéo nous dit que ça plante dans son TP si aucune des deux valeurs n'est mise, alors faut en mettre une quoi !
                            STP aidez-moi
                            Kayl ==> t'avais l'air de t'y connaitre un peu, maintenant que je t'ai mis le code tu vois pas d'où ça peut venir ? Tu ve que je poste le code des autres fichiers *.c ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              19 avril 2006 à 14:04:19

                              moi aussi j'aimerais bien la solution je suis coincé sur mon programme :'(

                              en fait le programme bloque sur la ligne :

                              int main (int argc, char *argv[])
                              { //surligne cette ligne !
                              //le code
                              }


                              le message d'erreur :

                              Citation : code::block

                              error : two or more data type in declaration of 'SDL_main'



                              s'il vous plait aider pierre89 ca m'aiderais aussi :)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                19 avril 2006 à 15:49:42

                                Oui, svp les gens, il y a plein de bêtes du C sur ce forum, ce serait sympa de nous aider !

                                hayden ==> je sais que avec la SDL, la fonction main n'est pas valide si on ne met pas int argc, char *argv[] entre les parenthèses du main, bon là apparemment t'y as mis mais vérifie qu'il n'y a pas de faute de frappe !
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  19 avril 2006 à 16:41:54

                                  ben non j'ai verifié :'(

                                  aller svp je suis sur qu'il y en a qui save ici

                                  pour un petit zero ? :)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    20 avril 2006 à 10:47:10

                                    up !

                                    on a toujours pas la bonne reponse :(
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      20 avril 2006 à 11:12:14

                                      Tu peux montrer le moment où tu appelles la fontion chargerNiveau?

                                      EDIT : je viens de remarquer que tu n'inclue pas fichier.h dans fichier.c. C'est peut-être ça?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        20 avril 2006 à 12:22:29

                                        rushia ==> Pour ton edit, je m'en suis aperçu, et j'y est remédier, mais j'ai toujours le problème, seulement c'est plus dans fichiers.c qu'il trouve l'erreur mais dans fichiers.h, bref c'est vraiment lors de la déclaration de fonction que ça pêche

                                        P.S. : Pour la fonction seuvegarderNiveau qui prend le même paramètre, aucun problème o_O

                                        code d'appel de fonction :
                                        chargerNiveau(carte);


                                        et la déclaration de carte :
                                        int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {0};
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          21 avril 2006 à 16:37:17

                                          SVP, problème non réglé !
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          [TP Mario] Problème à la compilation

                                          × 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