Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur C2371

Sujet résolu
    13 janvier 2022 à 14:47:18

    Bonjour,

    dans mon programme, à la compilation, j'ai une erreur que je ne comprends pas:

    Erreur	C2371	'bougerPersonnage' : redéfinition ; types de base différents	
    

    Je me suis renseigné sur internet mais je n'arrive pas à comprendre POURQUOI j'ai cette erreur. La fonction bougerPersonnage() a été déclarée avant dans un fichier d'en-tête.

    Voilà mon code:

    Jeu.h

    #pragma once
    /*
    Jeu.h
    
    Contient les définitions des fonctions de Jeu.c
    */
    
    #ifndef JEU_H
    #define JEU_H
    
    int jouer(const char* nomFichier);
    void dessineZone(const Vector2* from, const Vector2* to, Color color);
    void initNiveau(int*** map);
    void afficheTableau(int*** map);
    void bougerPersonnage(Direction direction, int*** map);
    
    #endif

     Jeu.c

    #include "raylib.h"
    #include "Jeu.h"
    #include "Fichier.h"
    #include "Constantes.h"
    
    int jouer(const char* nomFichier)
    {
    	int** map = chargeNiveau(nomFichier);
    
    	BeginDrawing();
    	ClearBackground(WHITE);
    	initNiveau(&map);
    	EndDrawing();
    
    	while (!WindowShouldClose())
    	{
    		BeginDrawing();
    		ClearBackground(WHITE);
    		afficheTableau(&map);
    		/*Pour l'instant, on affiche seuleument l'image du personnage, sans l'animation*/
    		DrawTexture(personnage.stopAnim, personnage.pos.x, personnage.pos.y, WHITE);
    		DrawText(nomLevel, 0, 0, 20, BLACK);
    		if (isKeyPressed(KEY_UP))
    		{
    			bougerPersonnage(up, &map);
    		}
    		if (isKeyPressed(KEY_LEFT))
    		{
    			bougerPersonnage(left, &map);
    		}
    		if (isKeyPressed(KEY_RIGHT))
    		{
    			bougerPersonnage(right, &map);
    		}
    
    		/*Gravité*/
    		bougerPersonnage(down, &map);
    	}
    
    	/*On remet nomLevel à sa valeur par défaut*/
    	for (int i = 0; i < 50; i++)
    	{
    		nomLevel[i] = 0;
    	}
    }
    
    /*Rempli une zone de la couleur spécifiée en paramètre entre les deux coordonées en paramètre*/
    void dessineZone(const Vector2* from, const Vector2* to, Color color)
    {
    	for (int x = 0; x < to->x - from->x; x++)
    	{
    		for (int y = 0; y < to->y - from->y; y++)
    		{
    			DrawPixel(from->x + x, from->y + y, color);
    		}
    	}
    }
    
    void initNiveau(int*** map)
    {
    	int compteur = 0;
    
    	while ((*map)[compteur][0] != end)
    	{
    		int* ligne = &(map[compteur][0]);
    
    		if (*ligne == spawn)
    		{
    			personnage.pos.x = (*map)[compteur][x];
    			personnage.pos.y = (*map)[compteur][y];
    		}
    		else if (*ligne == obstacle)
    		{
    			Vector2 from, to;
    			from.x = (*map)[compteur][sourceX];
    			from.y = (*map)[compteur][sourceY];
    			to.x = (*map)[compteur][destX];
    			to.y = (*map)[compteur][destY];
    			dessineZone(&from, &to, BLACK);
    		}
    	}
    }
    
    void afficheTableau(int*** map)
    {
    	int compteur = 0;
    
    	while ((*map)[compteur][0] != end)
    	{
    		int* ligne = &(map[compteur][0]);
    
    		if (*ligne == obstacle)
    		{
    			Vector2 from, to;
    			from.x = (*map)[compteur][sourceX];
    			from.y = (*map)[compteur][sourceY];
    			to.x = (*map)[compteur][destX];
    			to.y = (*map)[compteur][destY];
    			dessineZone(&from, &to, BLACK);
    		}
    	}
    }
    
    void bougerPersonnage(Direction direction, int ***map)
    {
    	int isCollision = 0;
    	int compteur;
    
    	while ((*map)[compteur][0] != end)
    	{
    		if (direction = up)
    		{
    			if (personnage.pos.y-5 <= (*map)[compteur][destY] && personnage.pos.y-5 >= (*map)[compteur][sourceY])
    			{
    				isCollision = 1;
    				break;
    			}
    		}
    		if (direction = down)
    		{
    			if (personnage.pos.y + 1 <= (*map)[compteur][destY] && personnage.pos.y + 1 >= (*map)[compteur][sourceY])
    			{
    				isCollision = 1;
    				break;
    			}
    		}
    		if (direction = left)
    		{
    			if (personnage.pos.x - 1 <= (*map)[compteur][destX] && personnage.pos.x - 1 >= (*map)[compteur][sourceX])
    			{
    				isCollision = 1;
    				break;
    			}
    		}
    		if (direction = right)
    		{
    			if (personnage.pos.x + 1 <= (*map)[compteur][destX] && personnage.pos.x + 1 >= (*map)[compteur][sourceX])
    			{
    				isCollision = 1;
    				break;
    			}
    		}
    	}
    
    	if (isCollision == 0)
    	{
    		if (direction == up) personnage.pos.y-=5;
    		if (direction == down) personnage.pos.y++;
    		if (direction == left) personnage.pos.x--;
    		if (direction == right) personnage.pos.x++;
    	}
    	
    }

    Désolé pour mon code qui est plutôt mauvais (voir très mauvais), je l'ai fait un peu à la va-vite pour faire mon premier jeu en C et du coup si vous repérez des choses un peu bizzares, c'est normal. Tant que ça marche, ça me va.



    -
    Edité par SniffierPond 13 janvier 2022 à 14:49:35

    • Partager sur Facebook
    • Partager sur Twitter
      13 janvier 2022 à 15:44:02

      Comme je le disais dans un topic juste en dessous, les tableaux multidimensionnels sont pas toujours ce qu'il y a de plus élégant et performant (en plus d'être error prone).

      Pour ton problème, j'ai l'impression que tes déclarations de bougerPersonnage diffèrent d'un fichier à l'autre. Je sais que MSVC est un peu laxiste quand il connait pas un type, en l'occurence ton fichier jeu.h (qui n'est pas self-contained) utilise un type Direction qui n'est pas connu au moment d'inclure ce fichier ce qui n'est pas bon.

      Un entête devrait toujours pouvoir s'utiliser tout seul : il inclue le minimum vital mais doit se suffir à lui même, s'il a besoin d'autres types alors il doit les inclure ou faire des déclarations anticipées.

      À part ça vu le peu de code je ne vois pas d'où peut venir le problème.

      Autres notes :

      • fichier.h n'est pas un bon nom d'entête je suppose.
      • code en anglais.
      • Partager sur Facebook
      • Partager sur Twitter

      l'azerty est aux dispositions ce que subversion est aux SCM

        13 janvier 2022 à 17:04:04

        Dans le message d'erreur, il y a sûrement un numéro de ligne indiqué

        -
        Edité par michelbillaud 13 janvier 2022 à 17:07:30

        • Partager sur Facebook
        • Partager sur Twitter
          13 janvier 2022 à 17:46:14

          Oui, c'est la définition de la fonction bougerPersonnage() qui pose problème.

          EDIT: J'ai inclu le fichier où était défini le type Direction et maintenant c'est bon, j'ai toujours des erreurs mais plus les mêmes.

          -
          Edité par SniffierPond 13 janvier 2022 à 17:50:27

          • Partager sur Facebook
          • Partager sur Twitter
            13 janvier 2022 à 20:26:28

            N'hésitez pas à noter le topic comme résolu si tel est le cas (les autres erreurs méritent un autre topic).
            • Partager sur Facebook
            • Partager sur Twitter

            l'azerty est aux dispositions ce que subversion est aux SCM

            Erreur C2371

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            • Editeur
            • Markdown