2016-09-26 7 views
-1

私が構造を持っている:ポインタからのポインタから変数の値を参照するにはどうすればよいですか?

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; 

と内容を表示する関数:

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

私は部屋IDが-1(設定中に設定されている場合ようにそれを作るしようとしていますプログラムが実行されます)、その部屋に関する情報は表示されません。コンパイル時に、構造体または共用体ではないメンバーの 'id'要求がエラーになります。

さらに、私は、if条件R->ノース - > IDを設定しようとした、それは私はあなたが前進をしたいと思って

+0

'typedef struct {' - > 'typedef struct room {'そして 'r-> north-> id' – BLUEPIXY

+0

あなたが問題を理解していないならば、キャストは使わないでください! – Olaf

+0

'r-> west'はポインタですよね? '.'は構造体と共用体でのみ機能し、ポインタは構造体や共用体ではありません。だから 'r-> west.anything'は無効です。しかし、 ''(* r-> west).anything'や 'r-> west-> anything'を使うことができます。 – immibis

答えて

1

「『構造体の部屋』不完全な型へのポインタを参照解除する」エラーを返します。このような宣言は:

typedef struct room room; 

struct room{ 
    . 
    . 
    . 
}; 

その後、あなたはr->north->idを使用することができます。 How to define a typedef struct containing pointers to itself?

関連する問題