typedef的冲突类型

时间:2012-12-25 03:17:57

标签: c struct header typedef

我尝试在C中构建ADT。例如,在实现包含int类型元素的堆栈时。我将typedef int item_t放在头文件中,这样我只能更改一行来使用相同的堆栈来存储double元素。

当我实现二叉树时,我使用相同的技能。例如,我在node.h中声明了一个节点,如下所示

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

现在,我在typedef int item_t中使用node.h。如果我想使用堆栈来存储link_t中声明的node.h类型的元素,并将它们视为item_t。我该怎么办?

我不能在stack.h中执行以下操作

#include "node.h"
typedef link_t item_t;

因为我在node.h中有typedef item_t,编译器会抱怨。 conflicting types for ‘item_t’

3 个答案:

答案 0 :(得分:1)

使用C语言制作ADT既简单又有趣,并且具有良好的学习体验。但是,您无法在任何可以重用于不同ADT的基于C语言中创建真正通用的ADT,您必须为每个ADT创建单独的结构。

答案 1 :(得分:0)

您将无法通过广泛的复制粘贴解决此问题。如果您想根据此处的link_t模型在BST中存储三个node_t,那么您必须使用新名称定义新结构。 (您也可以使用工会在BST的每个元素中存储link_titem_t,但这可能会因您的目的而过于复杂。)

答案 2 :(得分:0)

不,你要做的不合逻辑。你告诉编译器将2个不同的东西(int和link_t)输入到1个东西(item_t)。那没有意义。