2013-01-07 74 views
0

我做了一個二叉樹分配列表時,不兼容的類型,其中有三個基本層次結構的:遞歸數據結構走錯了 - 從類型結構* L

typedef struct l { 
    char n[15]; 
    struct l *next; 
} List; 

typedef struct { 
    char rname[20]; 
    char lname[20]; 
    List number; 
} info; 

typedef struct tree { 
    info thisnode; 
    struct tree *left; 
    struct tree *right; 
} Tree; 

,並在此行代碼

t->thisnode.number = t->thisnode.number.next; 

我獲得了冠軍,遞歸數據結構這些類型分配工作提到

通常錯誤,儘管未來有型結構* L。任何人都可以幫我弄清楚爲什麼在這種情況下它不起作用?

此外,我會本能地有以上行

t->thisnode.number = t->thisnode.number->next; 

但我的編譯器似乎喜歡就更少了。

回答

0

那麼,類型肯定是不兼容的。

number的類型next字段的是struct l *,但在numberinfo類型是List,其是用於struct l的別名,即整個struct,不只是一個指向它的指針。所以你試圖把一個指針分配到整個結構中,這個結構不會飛。

看來你缺少一個指針級別,或許number字段info應該是List *

+0

嗯,我喜歡你的建議,並將信息中的數字更改爲List *,這讓我做出了任務,並且擺脫了很多編譯器錯誤(一旦我將所有number.n更改爲號 - > N)。 但是在我的主函數中,我在插入一個條目後出現seg錯誤,而在我添加List結構之前,我沒有遇到這個問題。我有一點擺弄它,但我感覺C不喜歡那個3級結構,還是很好? – Joe

+0

好吧,似乎我忘了malloc當'數字'分配給number-> n [x]時,這似乎已經修復了seg錯誤。 – Joe

0

表達t->thisnode.numberList是類型(即struct l),而t->thisnode.number->nextstruct l *型的(當然,將是如果它實際上作爲訪問用的指針訪問語法的非指針構件編譯)。