probleme declaration "cyclique"
Bonjour,
Je me permet de cross-poster (forum de commentcamarche) car c'est assez urgent ...
Voila je veux programmer en c/c++ un intersecteur de polyedre en 3D. Je veut utiliser une structure de donnés de type "halfedge" (http://www.flipcode.com/archives/The...tructure.shtml) pour decrire mes polyedres.
Donc je veux me definir des types particulier mais le probleme, c'est que chacun de ces types utilise au moins un autre de ces nouveaux type donc le compilateur qui parcours le fichier dans l'ordre est perdu. En particulier, un champ de ma structure pour un de ces nouveau type est un pointeur vers ce type lui-meme!
Pour etre plus clair, voici le code de ce que je veut faire:
Code:
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
|
typedef struct
{
HEvert *vert;
HEface *face;
HEedge *twin;
HEedge *next;
} HEedge;
typedef struct
{
double coor[3];
HEedge *edge;
} HEvert;
typedef struct
{
HEedge *edge;
} HEface;
typedef struct
{
int nbfaces, nbedges, nbvertices;
HEface *face;
HEedge *edge;
HEvert *vert;
} HEpoly; |
J'ai essayé de creer à la place des classe avec à la place des (HEtruc *) des (void *) puis de caster en (HEtruc *) dans le constructeur:
Code:
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
|
////////////////////////////////////////////////////////////////////////
// partial declaration (type of fields casted by constructors) //
////////////////////////////////////////////////////////////////////////
class HEpoly
{
public:
// datas
int nbfaces, nbedges, nbvertices;
void *face;
void *edge;
void *vert;
// methods
HEpoly();
};
class HEface
{
public:
// datas
void *edge;
// methods
HEface();
};
class HEedge
{
public:
// datas
void *vert;
void *face;
void *twin;
void *next;
// methods
HEedge();
};
class HEvert
{
public:
//datas
double coor[3];
void *edge;
// methods
HEvert();
};
////////////////////////////////////////////////////////////////////////
// constructor definitions //
////////////////////////////////////////////////////////////////////////
HEpoly::HEpoly() {
face=(HEface *)face;
edge=(HEedge *)edge;
vert=(HEvert *)vert;
}
HEface::HEface() {
edge=(HEedge *)edge;
}
HEedge::HEedge() {
vert=(HEvert *)vert;
face=(HEface *)face;
twin=(HEedge *)twin;
next=(HEedge *)next;
}
HEvert::HEvert() {
edge=(HEedge *)edge;
}; |
Cette declaration est ok mais je ne peut pas faire par exemple (pointer of type ‘void *’ used in arithmetic):
Code:
1 2 3 4 5
|
HEpoly poly1;
poly1.nbfaces=6;
poly1.face=(HEface *)malloc(poly1.nbedges*sizeof(HEface));
poly1.face[1]->edge=1; |
Voilà, si quelqu'un à une idée.
Merci d'avance