2012-12-25 116 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制作一个单独的结构。