/ / ¿Cómo puedo hacer referencia a un valor de una variable desde un puntero desde un puntero? - C, variables, punteros, estructura, errores del compilador

¿Cómo puedo hacer referencia a un valor de una variable desde un puntero desde un puntero? - C, variables, punteros, estructura, errores del compilador

Tengo una estructura

 struct room;
...
/*some more structs */

typedef struct {
int state;
int id;
struct room* north;
struct room* south;
struct room* east;
struct room* west;
creature* creatures[10];
} room;

Y una función que imprime los contenidos:

 void printContentsOfRoom(room* r) {
printf("nRoom %d:n", r->id);
printf("tState: %sn", getState(r));
printf("ntNeighbors:n");
if (r->north.id != -1)
printf("t    North: Room %dn",((room*)r->north)->id);
if (r->east.id != -1)
printf("t    East: Room %dn",((room*)r->east)->id);
if (r->south.id != -1)
printf("t    South: Room %dn",((room*)r->south)->id);
if (r->west.id != -1)
printf("t    West: Room %dn",((room*)r->west)->id);
printf("ntCreatures:n");
for (int i = 0; i < 10; i++) {
creature* c = (creature*)r->creatures[i];
if (c) {
if (c == pc)
printf("t    %sn",getType(c));
else
printf("t    %s %dn",getType(c),c->id);
}
}
}

Estoy tratando de hacerlo de modo que si la identificación de la habitación esestablecido en -1 (configurado mientras se ejecuta el programa), no imprime la información sobre esa sala. En la compilación, obtengo el error "solicitud de miembro" id "en algo que no es una estructura o unión".

Además, he intentado establecer la condición if r-> north-> id, y eso devuelve el error "puntero de desreferenciación al tipo incompleto" sala de estructura ""

Respuestas

1 para la respuesta № 1

Creo que quieres hacer una declaración hacia adelante como esta:

typedef struct room room;

struct room{
.
.
.
};

Entonces puedes usar r->north->id. Vea esta pregunta SO: ¿Cómo definir una estructura typedef que contiene punteros a sí mismo?