implementer une struct dans un .c
Bonjour,
Je voudrai pouvoir creer un module possedant une structure Reseau seulement visible dans la partie privée de ce module (le .c). Voici mes fichiers (simplifiés au maxi)
reseau.h
Code:
1 2 3 4 5 6 7
|
#ifndef RESEAU_H
#define RESEAU_H
typedef struct Reseau Reseau;
#endif |
reseau.c
Code:
1 2 3 4 5 6 7
|
#include "reseau.h"
struct Reseau {
int **r;
int nb;
}; |
main.c
Code:
1 2 3 4 5 6 7 8 9
|
#include "reseau.h"
int main(int argc,char** argv){
Reseau *r;
/* erreur de compilation sur cette ligne : dereferencing pointer to incomplete type */
r->nb=2;
return 0;
} |
le module reseau compile, mais il ne veut pas creer main.o
Quelqu'un aurait il une idée ?
Re: implementer une struct dans un .c
Citation:
Envoyé par jamal
Je voudrai pouvoir creer un module possedant une structure Reseau seulement visible dans la partie privée de ce module (le .c). Voici mes fichiers (simplifiés au maxi)
reseau.h
Code:
1 2 3 4 5 6 7
|
#ifndef RESEAU_H
#define RESEAU_H
typedef struct Reseau Reseau;
#endif |
Interface de données opaques. Ok.
Citation:
reseau.c
Code:
1 2 3 4 5 6 7
|
#include "reseau.h"
struct Reseau {
int **r;
int nb;
}; |
Définition interne des données. OK
Citation:
main.c
Code:
1 2 3 4 5 6 7 8 9
|
#include "reseau.h"
int main(int argc,char** argv){
Reseau *r;
/* erreur de compilation sur cette ligne : dereferencing pointer to incomplete type */
r->nb=2;
return 0;
} |
2 erreurs fondamentales.
- Le pointeur 'r' n'est pas initialisé. Déréfrérencer un pointeur non initialisé entraine un comportement indéfini.
- le type Reseau étant opaque, on ne peut évidemment pas accéder à ses éléments directement. C'est le but de la manoeuvre!
Avant d'aller plus loin, je te conseille vivement une lecture approfondie de cet article. N'hésite pas à poser des questions si tu ne comprends pas.
http://emmanuel-delahaye.developpez.com/tad.htm