C/Visual C - Correlación entre estructuras con punteros.

 
Vista:

Correlación entre estructuras con punteros.

Publicado por R.G.A.M. (3 intervenciones) el 28/07/2009 20:26:19
Buenas a todos.

Tengo la necesidad de diseñar estructuras de una forma similar a la siguiente (en realidad, es más complejo, pero presentaré el problema principal):

struct sA
{
tipoA dato;
struct sB *puntero;
};

struct sB
{
tipoB dato;
struct sA *puntero;
};

Supongamos que tengo el siguiente parámetro para una función:
struct sA *variable;

El compilador me hace problemas de desreferencia cuando intento utilizar
variable->puntero->puntero
para acceder al dato correspondiente, comprobar si el puntero apunta a NULL, etc..

Lo extraño es que el compilador, antes de diseñar las funciones, no me lanzaba errores.
¿Cómo puedo solucionar?

Utilizo Dev-C++.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Correlación entre estructuras con punteros.

Publicado por Paco (4 intervenciones) el 29/07/2009 18:20:57
No he utilizado Dev-C++, pero imagino que pasa lo siguiente:
Al declarar la estructura sA incluyes un puntero a una estructura sB, que aun no ha sido definida. El compilador debiera dar un error (o al menos un warning, pero desconozco el compilador y no se que nivel de aviso tienes configurado para error/warning). Supongo que, probablemente, el compilador te haya generado (al desconocer sB) un puntero void en lugar de un puntero sB (y por ello no da error al compilar). Prueba con esto:

struct sA
{
tipoA dato;
void *puntero;
}

struct sB
{
tipoB dato;
struct sA puntero;
}

y cuando necesites utilizar el puntero a sB de sA:

sBptr = (struct sB *)sA.puntero;

es decir, haciendo un typecast (supondremos sBptr convenientemente declarado).

Espero que te haya servido de ayuda.

Un saludo,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Correlación entre estructuras con punteros.

Publicado por Tom (619 intervenciones) el 30/07/2009 16:26:12
También puedes probar si tu compilador soporta "forward declaration":

struct sB;

struct sA
{
tipoA dato;
struct sB *puntero;
};

struct sB
{
tipoB dato;
struct sA *puntero;
};
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar