回 帖 发 新 帖 刷新版面

主题:[讨论]求教多文件中定义问题

情况是这样的:
在一个名为"BiTree.h"中定义了
[code=c]
#include "SqStack.h"
typedef struct BiTNode{
    TElemType data;
    BiTNode *lchilde, *rchild;
}BiTNode, *BiTree;
[/code]
在另一个名为"SqStack.h"头文件中写了
[code=c]
typedef BiTree SElemType;
[/code]
可是BiTree下面出现了红线
如果在"SqStack.h"中加上
[code=c]
#include "BiTree.h"
[/code]
又会提示包含文件过多和重定义。

另外请教上面那个结构体和下面结构体的区别
[code=c]
typedef struct{
    TElemType data;
    BiTNode *lchilde, *rchild;
}BiTNode, *BiTree;
[/code]

回复列表 (共4个回复)

沙发

今天晚上广告好多,不要让沉了。。。

板凳

是我妹说明白还是高手不给力?
救命啊。。。

3 楼

你的问题看的不是很清楚,
边看边分析,讨论一下 
首先你的
#include "SqStack.h"
typedef struct BiTNode{
    TElemType data;
    BiTNode *lchilde, *rchild;
}BiTNode, *BiTree;

看懂一部分,这段代码完成两个功能。首先定义一个struct BiTNode的结构体类型,然后新定义一个名字*BiTree
作用是在结构体为创立前,也可以使用BiTree,因为指针指向首地址,而此时还不能使用 BiTNode代替 struct BiTNode
(详见http://baike.baidu.com/view/1283800.htm)

接下来,你说在BiTree下面出现了红线,看不到你的源程序,我猜想是你没有定义*BiTree,而直接调用了指针,所以你在typedef前,加个指针定义。

最后的,你的
typedef struct{
    TElemType data;
    BiTNode *lchilde, *rchild;
}BiTNode, *BiTree;

我没有见过这样的结构,道理看(详见http://baike.baidu.com/view/1283800.htm)
struct 后什么都没有?

个人看法,仅供参考,

希望能有牛人指点,我与楼主一起学习

4 楼

typedef struct{
    TElemType data;
    BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
这个结构体我在VC++6中写过,可以运行,但是vs10不行,可能是一种不标准的使用。。。
因为使用了typedef,把结构听定义成了BiTNode的类型,然后使用BiTNode声明了*lchild

然后遍历二叉树的时候使用了栈,于是我我写了一个SqStack.h,把结构的类型写进去,于是有了
typedef BiTree SElemType;
可是BiTree是在BiTree.h中声明的啊,于是就需要#include "BiTree.h"
这样互相引用就出现了错误。。。
于是一个问题就这样出现了。。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册