Erreur c, multiple definitions

Salut j ai ecrit un programme c, separe en plusieurs *.c et un header common.h, cependant a la compilation j ai pleins d erreurs du type multiple definition of
voila le header


#ifndef COMMON_H
#define COMMON_H

#include <stdio.h> 
#include <math.h>                      
#include <malloc.h>                    
#include <stdlib.h>                     
#include <string.h>		
#include <time.h>

#define zero	(double)0.0
#define one		(double)1.0
#define two		(double)2.0
#define three	(double)3.0
#define four	(double)4.0
#define five    (double)5.0
#define six		(double)6.0
#define seven	(double)7.0
#define eight	(double)8.0
#define pi      (double)acos(-one)

int nmesh;
int multigrid,testcase;
double tol,cll,clr;
double **dt;
double *p2h;
double **increment;
int *nelems,*nnodes,*fcc;
int ***pbc_list;
int **nb_elem_pbc;
struct vector{double x,y;};
struct vertex{int nod1,nod2,nod3;};
struct node
{
	double u;
	int *elem;
	double x,y;
} **nod;
struct edge
{
	int nod1,nod2;
	double length;
	int bd_mark;
};
struct triangle
{
	double u;
	struct vector bary;
	struct vertex vert;
	int neigh[3];
	struct vector norm[3];
	double area;
	struct edge edg[3];
	int parent;
	int child[4];
} **tri;

void read_input();
void mesh_init();
void mesh_refin();
void write_mesh();
void geometry();
void initialize();
void permut(int*,int*,int*);
void solver();
void lmg();
void restriction(int,struct triangle*,struct triangle*);
void restriction_res(int,double[],double[],struct triangle*);
void interpolation(int,struct triangle*,struct triangle*,double[]);
void forcing(int*,int*,int,int,struct triangle*,struct triangle*,
			 struct node*,struct node*,int**,int**);
void runge_kutta(int*,int,struct triangle*,struct node*,int**,double*);
void right_hand_side(int*,int,struct triangle*,struct node*,int**,double[]);
void right_hand_side2(int*,int,struct triangle*,struct node*,int**,double[]);
void cal_err(int,double[],double*,int*);
void output_struc();
void output_unstruc();
void mesh_conn();
#endif

merci pour votre aide
Francois

C’est quoi les messages d’erreurs?

multiple definition of nmesh
first defined here
multiple definition of multigrid
first defined here
…
ainsi de suite pour toutes les variables

j utilise dev-c++, et ca ne me donne pas plus de details

Dev C++ est « mort », et remplacé par CodeBlocks, 'fin bref, ça reste un sacré mort vivant à toujours hanter les gens :slight_smile:

Pour lui, tu redéfinis des valeurs. Essaye en collant un « extern » devant le int, comme :

extern int nmesh;
extern int multigrid,testcase;
extern double tol,cll,clr;
extern double **dt;
extern double *p2h;
extern double **increment;
extern int *nelems,*nnodes,*fcc;
extern int ***pbc_list;
extern int **nb_elem_pbc;
extern struct vector{double x,y;};
extern struct vertex{int nod1,nod2,nod3;};

Et ainsi de suite.

Ceci dit, laisser des variables globales accessibles comme ça, ce n’est peut être pas la meilleure chose à faire…

merci pour ta reponse,

alors j ai mis la commande extern cela ne change malheureusement rien.

tu peux m en dire un petit peu plus ?
Merci

Je disais juste que j’aime pas les variables globales, rien de plus.

Et que dans ton cas, si c’est ce que tu veux, tant mieux :slight_smile: mais perso, j’aurai contourné le problème.