首页 新闻 搜索 专区 学院

头文件相互包含的问题

0
悬赏园豆:10 [已解决问题] 解决于 2012-11-30 12:27

第一个头文件map.h包含如下代码:

#include "stack.h"

int MazePath(Map map,int row,int col,int n,Stack *s);  //(2)声明函数

 

第二个头文件stack.h包含如下代码:

#include "map.h"

typedef struct stack{
    int Top,Maxstack;
    DATA_TYPE Element[MAXSIZE];        /* 顺序存储堆栈 */
}Stack;              //定义Stack类型

虽然stack.h中定义了Stack类型,但是因为编译器在展开stack.h时先包含map.h进来,此时map.h中的Stack尚未定义,于是就出现错误:

expected declaration specifiers or '...' before 'Stack'   , 指标号(2)处的代码出错。

我想问如果在头文件相互包含时应该注意什么问题,有什么方法可以解决这种类似的冲突,还有什么书籍资料可以提供阅读参考?

手感冰凉的主页 手感冰凉 | 初学一级 | 园豆:195
提问于:2012-11-26 21:20
< >
分享
最佳答案
0

class Stack;
int MazePath(Map map,int row,int col,int n,Stack *s); 

这里不要去引用stack.h,而是在cppz中引用

收获园豆:5
福娃儿 | 菜鸟二级 |园豆:207 | 2012-11-29 11:00

大概知道你的意思。再问一下Stack是数据类型,不是对象,使用时可以声明吗?

手感冰凉 | 园豆:195 (初学一级) | 2012-11-29 13:00
其他回答(4)
0

一般使用prgama once 或#ifdef *** 解决头文件多重包含问题

2012 | 园豆:19163 (专家六级) | 2012-11-27 08:23

如果A文件要用到B文件定义的数据,而B文件又要用到A文件定义的数据,这种冲突怎么办,就像我上面出现的情况

支持(0) 反对(0) 手感冰凉 | 园豆:195 (初学一级) | 2012-11-27 12:52
0

本人感觉这并不是一种很好的编程风格,还是不要用这种方法吧!

收获园豆:5
net小伙 | 园豆:232 (菜鸟二级) | 2012-11-27 16:12

那用什么其它方法呢

支持(0) 反对(0) 手感冰凉 | 园豆:195 (初学一级) | 2012-11-27 21:25
支持(0) 反对(0) net小伙 | 园豆:232 (菜鸟二级) | 2012-11-28 09:16
0

在其中一个头文件中用声明,例如在map.h中直接 声明 (不是定义)Stack,然后不要包含stack.h头文件试试。

lvshuchengyin | 园豆:204 (菜鸟二级) | 2012-11-30 09:31
0

我目前想到的解决方法是:头文件不包含头文件,只在源文件中包含头文件。包含多个头文件时,根据头文件之间的依赖关系调整它们的顺序,如果A依赖于B(例如A文件中使用了B文件定义的对象或数据类型),先#include "B.h",再#include "A.h"。

手感冰凉 | 园豆:195 (初学一级) | 2012-11-30 12:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册