2017-05-30 61 views
-1

我想在c中創建一個潛艇遊戲,所以我做了一個將潛艇在船上的「位置」連接到潛艇的自我,這些都是我使用的結構;如何處理設置爲指針的結構的結構成員?

struct Point_s 
{ 
    int x; 
    int y; 
}; 

struct BoardPart_s 
{ 
    boolean ishit;//yes = 1 no = 0 
    Submarine* Sub; 
}; 

    struct Submarine_s 
{ 
    Point start; 
    Point end; 
    int Life;// this is calculated from the diffrence of the non equal part of the x/y Point 
}; 

現在當分配新建分配FY指出這樣

Board[xstart][yend]->Sub=&(Plist->sub);// plist is a linked list conatining a submarine 

然而,當我嘗試accses其成員的生活就像是

BoardPart BoardP2[BoardSize][BoardSize];// boardsize is 10 
. 
. 
. 
. 
. 
if(BoardP2[x][y]->Sub->Life <= 0) 

我得到一個編譯錯誤的成員「請求「生活'的東西不是結構或聯盟「

我應該注意到,在hea中的typedef DER入賬這樣

typedef struct Point_s* Point; 
typedef struct Submarine_s* Submarine; 
typedef struct Command_s* Command; 
typedef struct BoardPart_s* BoardPart; 
+0

你有沒有正確'typedef struct submarine_s submarine;'在你使用該類型之前的某個地方? – Ctx

+1

放入完整的代碼。您正在訪問'Submarine'''Life'',但是在您的代碼中它是一個'Submarine_s',它具有'Life'屬性 – Badda

+0

是的,我在標頭上使用了ADT定義 –

回答

2

在您的例子BoardPart_s結構的SubSubmarine *SubmarineSubmarine_s *。因此,要訪問該SubLife字段,您應該編寫(**(BoardP2[x][y]->Sub)).Life

爲了避免這種混淆,您應該始終避免typedefing指向類型的指針。