• Lunes 16 de Diciembre de 2024, 03:50

Autor Tema:  Typedef Struct Algo1 {...} Alo2;  (Leído 1540 veces)

tglaria

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Typedef Struct Algo1 {...} Alo2;
« en: Viernes 24 de Junio de 2005, 06:55 »
0
si pongo :


typedef struct cancion
{
char parte;
struct cancion *siguiente;
...
} tipoCancion;

¿para qué es 'cancion' y 'tipoCancion'?, ¿cuál es la diferencia?

osea, en un prog si no pongo tipoCancion, el compilador me tira error de :
"[Warning] useless keyword or type name in empty declaration"

si saco 'cancion', me sale un error de:
"dereferencing pointer to incomplete type" aparte de errores varios al asignar un espacio de memoria (malloc).

el problema es k no entiendo la diferencia, y si les llamo igual, funciona sin problemas.
Bueno, gracias de antemano.

PD: uso el Devc++ p'a compilar y el vim p'a escribir.[/FONT][/FONT]

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Typedef Struct Algo1 {...} Alo2;
« Respuesta #1 en: Viernes 24 de Junio de 2005, 12:18 »
0
el tipo typedef te permite definir con un nombre un tipo de vble concreta, por ejemplo:
Código: Text
  1.  
  2. typedef struct
  3. {
  4. int a;
  5. float b;
  6. }st_estructura;
  7.  
  8.  
lo que haces es que estructura sea un tipo struct con dos vbles dentro, un int a y un float b.  Así desde tu programa principal podrías declarar una variable de esta forma:
Código: Text
  1.  
  2. void main()
  3. {
  4. st_estructura una_estructura
  5. }
  6.  
  7.  
De esta forma evitas tener que declararla de esta forma:
struct estructura una_estructura;
Ahora bien el caso de tu estructura es especial, puesto que dentro de la propia estructura tienes que referenciar la propia estructura.  Cuando defines la estructura con un tipo typedef, hasta que no terminas la estructura y le pones un nombre el compilador no sabe el nombre de esa estructura, así si declaras la estructura de la siguiente forma generarías un error:
Código: Text
  1.  
  2. typedef struct
  3. {
  4. int a;
  5. st_estructura *sigte;
  6. }st_estructura;
  7.  
  8.  
El error se debe a que hasta que no se termina de definir la estructura el compilador no sabe el nombre de esta, por tanto cuando se hace st_estructura *sigte el compilador aun no sabe qué es st_estructura.
Para solventar este problema se define en la estructura un nombre al principio de tal forma que puede ser referenciada antes de terminar con la definición:
Código: Text
  1.  
  2. typedef struct estructura
  3. {
  4. int a;
  5. struct estructura *sigte;
  6. }st_estructura
  7.  
  8.  
En este caso el compilador no da error porque antes de terminar la estructura ya le habías dado un nombre.  Espero que te sirva de ayuda, Un saludo  :lightsabre:
No hay tonto más molesto que el ingenioso.

tglaria

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Typedef Struct Algo1 {...} Alo2;
« Respuesta #2 en: Sábado 25 de Junio de 2005, 07:28 »
0
perfecto ahora entiendo
(me estaba ekivocando en una idiotez....)

muchas gracias :lol: