Multiple definition of ... first define here

gunnermens -  
 gunnermens -
Bonjour,

je fait un programme sur code block.
Le programme compilait bien, mais il commençait à être gros pour un seul fichier.
J'ai donc créer d'autre fichier pour alléger le main.c.
Les fichier sont bien ajouter au projet.
Les .h et les .c sauf le main.c contiennent #ifndef #define code #endif.
aucun fichier .c n'est include.
tout les fichier .h nécessaires sont include.
j'obtiens tout de même le message d'erreur: multiple definition of "nom de la variable"
Il s'agit de mes variables globales que j'ai mis dans un .h
ces variables ne sont initialisé nul part d'autre.
merci de bien vouloir m'aider à résoudre ce problème.

A voir également:

7 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,
Comme tu peux t'en douter, si ton compilateur signale une erreur, c'est que ton code contient une erreur.
Merci donc de poster ton code et notamment toutes les définitions de ta variable à l'origine de l'erreur.
1
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
#ifndef ACTION_C
#define ACTION_C

Pas besoin dans les .c (puisqu'un .c ne s'inclue pas).

Sinon pour les variables globales, c'est vivement déconseillé de les utiliser de cette façon. Cela s'utilise plutôt pour des constantes. Mais pas pour le reste. Dans ton cas, tu n'as besoin d'aucunes variables globales. Je te conseille donc de revoir ton code.

Par tout hasard, n'aurais-tu pas fait un int i; ou quelque chose de ce genre dans ton main ?

Cdlt,
1
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Relis la dernière ligne de mon précédent commentaire...
1
gunnermens
 
Merci pour la réponse rapide.
voici les .h et le .c qui sont en défaut
quand la fonction de action.c est dans le main.c, ca compile.

fonctions.h:
#ifndef FONCTIONS_H
#define FONCTIONS_H

/****************************************
fonctions
****************************************/
void items(void);
void points(void);
void actionf (void);
void couperdubois (void);
void pecherdupoisson (void);
void coupe (void);
void peche (void);
void manger (void);
void passivite (void);
void load (void);
void save (void);
void delaisms (int ms);
void acheter (void);
void achat (void);
void vendre (void);
void vente (void);
void fabriquer (void);

#endif // FONCTIONS_H_INCLUDED


variablesGlobales.h
#ifndef VARIABLESGLOBALES_H
#define VARIABLESGLOBALES_H

/****************************************
variables globales
****************************************/
FILE* sauvegarde = NULL;
float bucheron = 0;
float pecheur = 0;
int temps = 0;
int hache = 0;
int caneapeche = 0;
int quitter = 0;
int choix = 0;
int bois = 0;
int typePoisson = 0;
int typeBois = 0;
int poissons = 0;
int sommeil = 100;
int energie = 30;
int principal = 0;
int actionb = 0;
float i = 0;
float nombreskills = 4; //nombre de varible d'expérience
int XP = 0;
int niveau = 1;
int argent = 0;
float acheteur = 0;
float vendeur = 0;

#endif // VARIABLESGLOBALES_H_INCLUDED


actions.c
#include <stdio.h>
#include <stdlib.h>
#include "fonctions.h"
#include "variablesGlobales.h"

#ifndef ACTION_C
#define ACTION_C

//Afficher les action disponible si le joueur choisi l'option 6 du menu principal
void actionf(void)
{
actionb = 0;
while (principal == 0 && energie > 0 && sommeil > 0)
{
printf ("Votre niveau de sommeil est %d\nVotre niveau d'energie est %d\n\n", sommeil, energie);
printf ("Quel action voulez vous faire?\n\n");
printf ("1. Revenir au menu principal\n");
printf ("2. manger\n");
printf ("3. Couper du bois\n");
printf ("4. Pecher du poisson\n");
printf ("5. Fabriquer un objet\n");
printf ("6. Vendre un item\n");
if (argent > 0)
{
printf ("7. Acheter un item\n");
}
scanf ("%d",&choix);
switch(choix)
{
case 1:
{
system("cls");
principal = 1;
break;
}
case 2:
{
system("cls");
manger();
break;
}
case 3:
{
system("cls");
couperdubois();
break;
}
case 4:
{
system("cls");
pecherdupoisson();
break;
}
case 5:
{
system("cls");
fabriquer();
break;
}
case 6:
{
system("cls");
vendre();
break;
}
if (argent > 0)
{
case 7:
{
system("cls");
acheter();
break;
}
}
default:
{
printf ("Choisi un nombre ecrit ci-haut/n");
break;
}
}
}
} // actions

#endif


Header du main (il est trop long pour mettre ici)
#include <stdio.h>
#include <stdlib.h>
#include "fonctions.h"
#include "variablesGlobales.h"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gunnermens
 
Toutes les variables globales sont identifier dans l'erreur
0
gunnermens
 
Merci! Ca fait longtemps que je travail sur ce code et au depart c'était plus simple pour moi de mettre les variables en global, mais je crois que je serais capable de modifier mon code. Ca risque d'etre long j'y avait penser mais je souhaitais une autre réponse. encore merci!
0
gunnermens
 
Non il n'y a pas de int i dans le main il y a un float i dans les variables globales.
De toute facon, j'ai décider d'utiliser des pointeur comme j'aurais du le faire au départ. Ca va surement régler le probleme.
0