Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: BlackM4ster en 7 Abril 2013, 18:31 pm



Título: Ayuda Struct
Publicado por: BlackM4ster en 7 Abril 2013, 18:31 pm
Hola, estoy intentando hacer una estructura sencilla para usar dentro de otra, son estas:
Código:
struct Objeto{

Bounding bounding;
   float x, y, z;};
y en otra cabecera:
Código:
struct Bounding {

int Tipo; // 1 -> Esfera // 2 -> Box alineada a los ejes // 3 -> Box alineada al objeto

float xmax, xmin;
float ymax, ymin;
float zmax, zmin;
float r;

float vx[8], vy[8], vz[8];

void Crear(int tipo, GLuint objeto);
};

Pero no se porque me dice:
Código:
1>e:\c++\opengl\movimiento de pj + camara\juego1\idobjeto.h(12) : error C2146: error de sintaxis : falta ';' delante del identificador 'bounding'
y si en vez de Bounding bounding; pongo struct Bounding bounding;
Código:
error C2079: 'Objeto::bounding' utiliza struct 'Bounding' sin definir

Ayuda rapida porfavor


Título: Re: Ayuda Struct
Publicado por: rir3760 en 7 Abril 2013, 18:40 pm
¿Por favor puedes publicar el código fuente completo (por supuesto si no es muy largo)?

Con esos dos fragmentos lo único que se me ocurre es que revises el orden de las declaraciones (la declaración de "Bounding" debe encontrarse antes de la de "Objeto").

Un saludo


Título: Re: Ayuda Struct
Publicado por: BlackM4ster en 7 Abril 2013, 18:42 pm
a ver son 2 headers, cada 1 con su estrctura:
objetos.h
Código:
#include "Bounding.h"
struct Objeto{

struct Bounding bounding;
   float x, y, z;
   int modelo;
   float t_x, t_y, t_z;
   float r;
   int ang_x;
   bool g, c, usado;

   void Nuevo(int vmodelo, float vx,float vy,float vz,int vang_x,float vt_x,float vt_y,float vt_z, bool vg, bool vc) {
      modelo = vmodelo;
      ang_x = vang_x;
      x = vx;   t_x = vt_x;
      y = vy;   t_y = vt_y;
      z = vz;   t_z = vt_z;

  r = (t_x+t_y+t_z)/6;

  g = vg; c = vc;
  usado = true;
      ObjetosTotales++;
   }

   void PintarBoundingSphere(){

GLUquadricObj *q;
q=gluNewQuadric();
gluQuadricDrawStyle(q, GLU_SILHOUETTE);
gluQuadricNormals(q, GLU_SMOOTH);
gluQuadricTexture(q, GL_FALSE);
gluSphere(q,r+r/2,16,16);
gluDeleteQuadric(q);

   }
};

y la Bounding.h
Código:
#include "idobjeto.h"
struct Bounding {

int Tipo; // 1 -> Esfera // 2 -> Box alineada a los ejes // 3 -> Box alineada al objeto

float xmax, xmin;
float ymax, ymin;
float zmax, zmin;
float r;

float vx[8], vy[8], vz[8];

void Crear(int tipo, GLuint objeto);
};

eso es no más


Título: Re: Ayuda Struct
Publicado por: rir3760 en 7 Abril 2013, 18:52 pm
Te falto uno: "Objeto.h" incluye a "Bounding.h" y este a "idobjeto.h".

Un saludo


Título: Re: Ayuda Struct
Publicado por: BlackM4ster en 7 Abril 2013, 18:57 pm
Uups "Objeto.h" = "idobjeto.h" esque lo habia cambiado para el ejemplo.
De por si está bien incluido  :-[


Título: Re: Ayuda Struct
Publicado por: rir3760 en 7 Abril 2013, 19:13 pm
Déjame ver si entiendo correctamente:

1) El primer archivo se llama "Objeto.h" y su primera linea es:
Código
  1. #include "Bounding.h"

2) El segundo archivo se llama "Bounding.h" y su primera linea es:
Código
  1. #include "Objeto.h"

Si es así el problema es una dependencia circular: no puedes tener dos archivos donde cada uno incluya al otro.

Un saludo


Título: Re: Ayuda Struct
Publicado por: BlackM4ster en 7 Abril 2013, 19:24 pm
mm si quito la primera linea de bounding sigue fallando


Título: Re: Ayuda Struct
Publicado por: rir3760 en 7 Abril 2013, 19:53 pm
Revisando con cuidado utilizas la variable "ObjetosTotales" pero no la declaras en ninguno de los dos archivos.

Mejor publica el código fuente completo junto con las actualizaciones que hayas realizado.

Un saludo


Título: Re: Ayuda Struct
Publicado por: BlackM4ster en 7 Abril 2013, 20:00 pm
https://www.dropbox.com/s/ar6etr7405jds2j/Movimiento%20de%20pj%20%2B%20camara.rar


Título: Re: Ayuda Struct
Publicado por: avesudra en 7 Abril 2013, 20:16 pm
Quizás es lo que tu dices rir3760 lo de la referencia circular.
En Pj.h
Código
  1. #include "IdObjeto.h"
  2. #include "Includes.h"
En idObjeto.h
Código
  1. #include "Includes.h"
  2. #include "Bounding.h"
En Bounding.h
Código
  1. #include "Includes.h"
  2. #pragma once
  3. #include "Pj.h"
Yo que tú metería en  Includes.h esto:
Código
  1. #include "Bounding.h"
  2. #include "Pj.h"
  3. #include "idObjeto.h"
Y dejaría a los demás con la cabecera Includes.h únicamente, prueba tu porque yo no tengo OpenGL instalado. Creo que es una referencia circular dado que bounding incluye a pj y pj incluye a idObjeto que incluye a pj y así sucesivamente ...


Título: Re: Ayuda Struct
Publicado por: BlackM4ster en 8 Abril 2013, 14:37 pm
SII, muchas gracias por las respuestas de todos, he cambiado el includes y funciona a la perfección !!!!  ;-) ;-)