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
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.
git is great because Linus did it, mercurial is better because he didn't.
N'hésitez pas à noter le topic comme résolu si tel est le cas (les autres erreurs méritent un autre topic).
git is great because Linus did it, mercurial is better because he didn't.
Erreur C2371
× 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.
git is great because Linus did it, mercurial is better because he didn't.
git is great because Linus did it, mercurial is better because he didn't.