[C/C++] probleme declaration
Résolu
Janou195
-
loupius -
loupius -
Bonjour,
Voila je veux programmer en c/c++ un intersecteur de polyedre en 3D. Je veut utiliser une structure de donnés de type "halfedge" (https://www.flipcode.com/archives/The_Half-Edge_Data_Structure.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:
J'ai essayé de creer à la place des classe avec à la place des (HEtruc *) des (void *) puis de caster en (HEtruc *) dans le constructeur:
Cette declaration est ok mais je ne peut pas faire par exemple (pointer of type ‘void *’ used in arithmetic):
Voilà, si quelqu'un à une idée.
Merci
Voila je veux programmer en c/c++ un intersecteur de polyedre en 3D. Je veut utiliser une structure de donnés de type "halfedge" (https://www.flipcode.com/archives/The_Half-Edge_Data_Structure.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:
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:
//////////////////////////////////////////////////////////////////////// // 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):
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
A voir également:
- [C/C++] probleme declaration
- Déclaration - Guide
- En plus des revenus, il ne faut surtout pas oublier de faire cette déclaration en ligne aux impôts - Guide
- L'erreur qui peut coûter cher : il ne faut pas déclarer ces revenus aux impôts - Guide
- Vous devez absolument lire ce document des impôts avant de remplir votre déclaration de revenus - Guide
- Une très mauvaise surprise vous attend si vous avez fait une erreur dans votre déclaration de revenus cette année - Guide
2 réponses
Il suffit simplement de déclarer la classe comme on le fait avec un prototype de fonction.
Par exemple:
Bien sûr cela interdit de créer des objets de la classe B dans A, et permet seulement de définir des pointeurs; c'est dans le constructeur de A que les objets seront réellement créés.
Bonne continuation.
Par exemple:
class B; class A { ... B* b; ... }; class B { ... A a; ... };
Bien sûr cela interdit de créer des objets de la classe B dans A, et permet seulement de définir des pointeurs; c'est dans le constructeur de A que les objets seront réellement créés.
Bonne continuation.