Bonjour a tous, je ne suis pas une lumière en C et je rencontre un problème pour un petit projet.
J'ai 3 fichiers :
structures.h :
construction_graphe.h :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 #include <stdio.h> #include <errno.h> #include <stdlib.h> /* Un graphe ne dispose que d'un seul champ, un pointeur vers le Noeud qui sera le Noeud de "Depart" */ typedef struct Graphe{ Noeud *Depart; int Nombre_de_noeuds; }*Graphe; /* Un Noeud possede 2 tableaux d'arcs, un tableau pour les arcs entrants et un pour les arcs sortants */ /* Grace a cela nous pourrons nous deplacer dans le graphe d'avant en arriere ou d'arriere en avant */ typedef struct Noeud{ char *Nom; char *Proprietes; Arc *Arcs_entrants; int Nombre_d_arcs_entrants; Arc *Arcs_sortants; int Nombre_d_arcs_sortants; }*Noeud; /* Un arc a un Noeud source, un Noeud destination et enfin une action elementaire */ struct Arcs{ Noeud *Source; Noeud *Destination; char *Action; };
et enfin construction_graphe.c :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #include "structures.h" Graphe Creer_Graphe(); Graphe Creer_Noeud(char *prop, Graphe g); Graphe Creer_Arc(char* action, Noeud source, Noeud dest, Graphe g);
Je suis sous Unix et je compile avec gcc .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103 #include "construction_graphe.h" /* Fonction : Creer_Graphe */ /* Succes : Creation d'un nouveau Graphe */ /* Succes : Retourne le Graphe */ /* Echec : Retourne NULL */ /* Parametre(s) : Aucun(s) */ Graphe Creer_Graphe(){ Graphe g; g = malloc(sizeof(struct Graphe)); if( g == NULL) { perror("Erreur allocation memoire du graphe \n"); return NULL; } g->Nombre_de_noeuds = 0; return g; } /* Fonction : Creer_Noeud */ /* Succes : Creation d'un nouveau noeud qui n'est pas encore raccordé au reste du graphe */ /* Succes : Retourne le Graphe */ /* Echec : Retourne NULL */ /* Parametre(s) : Une chaine de caractères représentant les diverses propriétés du Noeud */ /* Parametre(s) : Le graphe auquel va être ajouté le Noeud */ Graphe Creer_Noeud(char* prop, Graphe g){ Noeud nouveau_noeud; nouveau_noeud = malloc(sizeof(struct Noeud)); if(nouveau_noeud == NULL) { perror("Erreur allocation memoire du nouveau noeud \n"); return NULL; } g->Nombre_de_noeuds ++; return g; } Graphe Creer_Arc(char* action, Noeud source, Noeud dest, Graphe g){ Arc nouvel_arc; nouvel_arc = malloc(sizeof(struct Arc)); if (nouvel_arc == NULL) { perror("Erreur allocation memoire du nouvel arc \n"); return NULL; } *(nouvel_arc.Source) = source; *(nouvel_arc.Destination) = dest; /* MAJ de l'espace memoire nécessaire pour stocker le nouvel arc dans les noeuds */ source->Arcs_sortants = realloc(source->Arcs_sortants, sizeof(struct Arc) * (source->Nombre_d_arcs_sortants + 1)); if (source->Arcs_sortants == NULL) { perror("Erreur reallocation memoire du nouvel arc dans le noeud source \n"); return NULL; } source->Nombre_d_arcs_sortants ++; dest->Arcs_entrants = realloc(dest->Arcs_entrants, sizeof(struct Arc) * (dest->Nombre_d_arcs_entrants + 1)); if (dest->Arcs_entrants == NULL) { perror("Erreur reallocation memoire du nouvel arc dans le noeud dest \n"); return NULL; } dest->Nombre_d_arcs_entrants ++; /* Fin de la MAJ */ /* Raccordement des noeuds grace a l'arc */ (source->Arcs_sortants)[source->Nombre_d_arcs_sortants] = nouvel_arc; (dest->Arcs_entrants)[dest->Nombre_d_arcs_entrants] = nouvel_arc; /* Fin du raccordement */ return g; }
En compilant avec gcc -ansi -pedantic -Wall -Werror , j'obtiens plein plein d'erreurs et je ne vois pas d'ou elles peuvent venir...
Excusez moi si mon problème est évident mais je connais pas trés bien le C
Peut être que ca vient de mes include non?
En espérant que quelqu'un puisse m'aider, merci d'avance (et désolé si le code est un peu long)
Partager