2011-09-04 66 views
4

Ansi C允許兩個不同的結構體可以包含彼此的指針(也顯示在structs-that-refer-to-each-other)。我知道在很多情況下這不是一個好主意,但這不是問題。使用typedef結構可以達到相同的效果嗎?Typedef'ed結構彼此具有指針

下面的代碼工作得很好。

struct b; 
typedef struct a { 
    struct b *bb; 
} A; 
typedef struct b { 
    struct a *aa; 
} B; 

但使用「B」型失敗

typedef struct b B; 
typedef struct a { 
    B *bb; 
} A; 
typedef struct b { 
    A *aa; 
} B; 

error: redefinition of typedef ‘B’

是否可以告訴編譯器「B」將在稍後宣佈,並在使用它A的定義?

回答

9

你可以這樣做,而不是:

typedef struct a A; 
typedef struct b B; 

struct a { 
    B *bb; 
}; 
struct b { 
    A *aa; 
}; 

這是否對你的工作?

+0

你能解釋爲什麼我使用這種方法有這個錯誤? typedef'A'的預先聲明'A'的重新定義在這裏? – klefevre

3

問題是您已經鍵入了它。

你應該做這樣的事情:

struct a; 
struct b; 
typedef struct a A; 
typedef struct b B; 

然後你就可以定義結構A和B,用A,B,A *,B *中的定義和b

+0

請注意,前兩行是多餘的,但可以證明更清楚。 –