C : dereferencing pointer to incomplete type

Fermé
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 - 12 déc. 2003 à 20:33
nabelou1 Messages postés 11 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 5 mai 2008 - 31 déc. 2007 à 00:55
salut tlm, j'espere q quelqu'un pourra trouver mon bonheur:
en fait voila j' ecris le bout de code et apres j'expliq :
[code]
////boat.h//////
typedef struct boat *boat;
//boat.c///////
struct boat {
int ymin, ymax;
int xmin, xmax;
int position;
};

///area.h//////////
#include "boat.h"
//et le reste

////area.c////////
int storeInArea (boat bt, area a) {
/*ligne 22*/if (bt->xmax - bt->xmin > 1 && bt->ymax - bt->ymin > 1)
[tab] return ERROR;
///et le reste
}
[/code]

et pouf a la ligne 22 il me dit :" dereferencing pointer to incomplete type" et je ne comprends pas.
si quelqu'un peut m'aider (une nouvelle fois) je lui en serai reconnaissant.

tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!

4 réponses

Salut,
A ta place, j'écrirais plutôt :

////boat.h//////
typedef struct boat *pboat;
//boat.c///////
struct boat {
int ymin, ymax;
int xmin, xmax;
int position;
};

///area.h//////////
#include "boat.h"
//et le reste

////area.c////////
int storeInArea (pboat bt, area a) {
/*ligne 22*/if (bt->xmax - bt->xmin > 1 && bt->ymax - bt->ymin > 1)
[tab] return ERROR;
///et le reste
}
[/code]

Ca devrait mieux marcher.

Car, tu donnes le même nom à la structure boat et au type défini comme étant un pointeur sur cette même structure. Ca fait pas bon ménage !

A+
0
D'ailleurs, il vaudrait mieux mettre le struct boat et le typedef dans le même fichier boat.h.
Ensuite, N'oublie pas d'inclure ce fichier dans area.c (soit directement en incluant boat.h, soit en l'incluant dans area.h mais en n'oubliant pas d'inclure area.h dans area.c).
Re-A+
0
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
12 déc. 2003 à 22:15
salut, merci , mais cela ne doit pas etre le bleme, car en C ansi la declaration d'un type structure se fait avec "struct <typestructure> <nomvar>" et ce n'est pas la premiere fois q je le fais.
Et pourtant le meme dereferencement marche ds boat.c ( createBoat (boat bt)) .
Ds ts les cas merci. (j'ai oublie de preciser, je suis sous linux).

tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
0
nabelou1 Messages postés 11 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 5 mai 2008 3
31 déc. 2007 à 00:55
bonjour
je vous demande de bien vouloir me donner un coup de main.
j'ai moi aussi un ce pbleme de dereferencing pointer to incomplet type.
en fait je lit dans un fichier les 2 premiers champs d'une variable de type struct qui correspond a un maillon d'une lisye chainée
voici le code
void extraction() /*extraction de données a partir d'un fichier*/
{
porigine cour=tete;
porigine nouveau;
fic=fopen("reseau.txt","r");
cour=0;
fscanf(fic,"%d%\n\n",&nb_ville);
for(i=0;i<nb_ville;i++)
{
nouveau=(porigine)malloc(sizeof(origine));
fscanf(fic,"%S %d",nouveau->nom,nouveau->nb);v[i]=nouveau->nom; /* c'et la que se pose le probleme*/
for(j=0;j<nb;j++)
{
fscanf(fic,"%s %d %d\n",nouveau->vois[j],nouveau->dvois[j],nouveau->type[j]);
}
nouveau->suiv=cour;tete=nouveau;
cour=tete;
fscanf("\n");
}
}
0