Hola amigos, estoy programando un visor de modelos 3D básicos (Figuras geométricas básicamente) partiendo de las primitivas 2D de Bennu.
El problema es que al crear las estructuras de datos que requiero, el compilador no acepta que una estructura A tenga un puntero a una estructura B que también tiene un puntero a la estructura A. Me explico mejor con un ejemplo de código:
[code language="bennu"]TYPE _vertice
int x,y,z;
_poligono POINTER poligono;
END
TYPE _poligono
_vertice POINTER vertices[16];
END[/code]
Mi estructura en cuestión es todavía más compleja, pero se entiende mejor con el código anterior. ¿Alguien sabe decirme cómo puedo hacer que algo así compile sin tener que modificar la estructura de datos? NECESITO que cada una de las estructuras mantenga un puntero a la otra.
Asias ;D
He conseguido hacer un "pequeño arreglo" para que funcione. Para ello he declarado uno de los POINTER sin indicar el tipo de dato al que quiero que apunte. En teoría con Bennu un puntero puede apuntar a cualquier cosa...
Adjunto el código final y compilando con este ovillo de punteros por si a alguien le resulta de utilidad:
[code language="bennu"]TYPE tp_3dfloat
float x,y,z;
END
TYPE tp_color
byte r,g,b;
END
TYPE tp_PolygonCell
POINTER Vertices; //No puede apuntar a tp_VertexListCell porque aún no está declarado
tp_3dfloat Normal;
bool Culled;
tp_PolygonCell POINTER Rest;
END
TYPE tp_PolygonListCell
tp_PolygonCell POINTER Polygon;
tp_PolygonListCell POINTER Rest;
END
TYPE tp_VertexCell
tp_3dfloat LocalPosition;
tp_3dfloat WorldPosition;
tp_3dfloat ScreenPosition;
tp_3dfloat Normal;
tp_PolygonListCell POINTER Polygons;
tp_VertexCell POINTER Rest;
END
TYPE tp_VertexListCell
tp_VertexCell POINTER Vertex;
tp_VertexListCell POINTER Rest;
END
TYPE tp_SurfaceCell
int NoofPolygons;
tp_PolygonCell POINTER PolygonHead;
tp_SurfaceCell POINTER Rest;
END
TYPE tp_ObjectCell
string Name;
int Number;
int NoofVertices;
int NoofSurfaces;
tp_SurfaceCell POINTER SurfaceHead;
tp_VertexCell POINTER VertexHead;
string Transfor[3][3];
tp_ObjectCell POINTER Rest;
END
TYPE tp_ViewPointRec
int view_plane_dist;
int rho, theta, phi;
END[/code]