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 : 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 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 : 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 //////////////////////////////////////////////////////////////////////// // 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager