Forum Clubic

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.