2012-12-25 123 views
0

我嘗試在C.構建ADT例如,雖然實施含int類型的元素的層疊體。我將把typedef int item_t放在頭文件中,這樣我就可以只更改一行來使用同一個堆棧來存儲double元素。衝突的類型的typedef

當我實現一個二叉樹時,我使用相同的技巧。例如,我在node.h聲明節點如下

typedef struct node_t *link_t; 
typedef int item_t; 
struct node_t { 
    item_t item; 
    link_t left; 
    link_t right; 
}; 

現在,我在node.h使用typedef int item_t。如果我想使用堆棧來存儲在node.h中聲明的link_t類型的元素,並將它們視爲item_t。我該怎麼辦?

我不能只是做如stack.h

#include "node.h" 
typedef link_t item_t; 

如下因爲我的typedef item_t在node.h,編譯器會抱怨。 conflicting types for ‘item_t’

回答

0

您將無法通過廣泛的複製粘貼的方式來解決這個問題。如果您想在此處根據您的node_t模型在BST中存儲三個link_t,則必須使用新名稱定義一個新結構。 (您也可以使用工會在BST的每個元素中存儲link_titem_t,但對於您的目的而言這可能過於複雜。)

0

不,您嘗試執行的操作不合邏輯。您正在告訴編譯器將typedef 2個不同的東西(int和link_t)設置爲1個東西(item_t)。那沒有意義。

1

在C中製作ADT既簡單又有趣,並且具有良好的學習體驗。但是,您不能在任何基於C的語言中製作真正通用的ADT,而這些語言可以用於不同的ADT,您必須爲每個ADT製作一個單獨的結構。