EternalSaul 2016-05-11 09:04 采纳率: 50%
浏览 11504
已采纳

如何把一个头文件中定义的结构体用到另一个头文件中,另一个头文件中定义的结构体又用到改头文件中?

//栈的头文件声明
#include
#include
#include "Tree"
#ifndef STACK_H
#define STACK_H
typedef union typelemt{
char ch;
Tree t;
}typelemt;
typedef struct stack{
typelemt* type_stack;
int max;
}stack;
typelemt pop(stack* p);//出栈
void push(stack* p,typelemt a);//入栈
void show_stack(stack* p);//释放栈
stack* build_stack();//建栈
void breakstack();//释放栈

#endif

//树的头文件声明
#include
#include
#include
#include "Stack.h"
#ifndef TREE_H
#define TREE_H
typedef char element;
typedef struct treeNode{
element value;//树值
struct treeNode* right;//左儿子
struct treeNode* left;//右二子
}treeNode;
typedef treeNode Tree;
void BuildTreeWithGeneralListInput(char
s);
//(广义表输入建树)
/*这个函数里要用到栈,但是这样写"Stack.h"包含"tree.h"而tree.h又包含Stack.h彼此包含无穷无尽先然这是错误的*/
//但是去掉Stack.h中的tree.h则我无法识别出union里的Tree
//去掉Tree.h中的Stack.h我就无法识别广义表输入建树用到的栈和它的函数
//怎么解决啊!!求前辈!
#endif

  • 写回答

1条回答 默认 最新

  • 小灸舞 2016-05-11 09:17
    关注

    解决这个问题并不难,楼主把
    #ifndef STACK_H
    #define STACK_H

    #ifndef TREE_H
    #define TREE_H
    放到文件的最前面,即include头文件前面

    但如果有源文件包含这两个头文件如果顺序不对的话,又会出现识别不了类型
    楼主可以读一下这篇:http://blog.csdn.net/hazir/article/details/38600419

    所以比较好的解决方法是,尽量避免头文件互相包含,将公用的结构放到另一个文件里,然后都包含那个文件

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 docker环境配置
  • ¥20 绿盟安全扫描--检测到目标站点存在javascript框架库漏洞
  • ¥30 Android STD快速启动
  • ¥15 如何使用simulink建立一个永磁同步直线电机模型?
  • ¥30 天体光谱图的的绘制并得到星表
  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现