两个类的头文件里都要用到同一个自己定义的结构体怎么用
答案:2 悬赏:80 手机版
解决时间 2021-03-16 21:01
- 提问者网友:爱了却不能说
- 2021-03-15 21:52
两个类的头文件里都要用到同一个自己定义的结构体怎么用
最佳答案
- 五星知识达人网友:胯下狙击手
- 2021-03-15 23:22
第二个文件如果include了第一个文件,那么第一个文件里面所有的被包含的文件也相当于在第二个文件里面被包含了。所以不用重新包含。
还有,你说那中情况是不会重复的。
一般情况下。文件都是这么写,无论你怎么弄都不会重复了
#ifndef __A_H__//这个宏一般就是你的文件名.变成下划线,前后各加两个下划线
#define __A_H__
你要写的代码的内容
#endif
还有,你说那中情况是不会重复的。
一般情况下。文件都是这么写,无论你怎么弄都不会重复了
#ifndef __A_H__//这个宏一般就是你的文件名.变成下划线,前后各加两个下划线
#define __A_H__
你要写的代码的内容
#endif
全部回答
- 1楼网友:轮獄道
- 2021-03-15 23:54
#include "头文件",这种声明是本文件包含了所包含的头文件里面内容,这样该文件在预处理时就会把头文件里面包含的内容搬过来,用其内容来替换#include "头文件"这条语句,因此多个文件包含同一头文件,或间接包同一含头文件就如楼主这种情况,就会在fun2中产生两次(甚至多次的)typedet struct student
{
int a;
int b;
}stu;
这个结构体定义,因此会出现重定义错误,要避免这种情况需要使用条件编译处理如下
struct.h 这个头文件就应该这样写
#ifndef fun_h//这个fun_h是随便写,但建议有意义也不能和别的头文件相同。
#define fun_h
typedet struct student
{
int a;
int b;
}stu;
#endif
fun1.h 这个头文件包涵struct.h 这个自定义头文件就应该进行条件编译处理如下写:
#ifndef fun_h
#define fun_h
#include "struct.h"
#endif
如果本头文件实现了函数就把函数声明放条件编译里面,函数定义放条件编译外面(一般都会是头文件只做函数原型声明,会在另一个源文件只做定义即实现,当然,对于内联函数有点点区别,楼主自己区别),这样一来fun1就该这样写:
#ifndef fun_h
#define
#include "struct.h"
void(int a, stu *studentone );
#endif
void(int a, stu *studentone )
{
//函数实现,但是一般不建议在头文件实现函数,内联函数除外
}
这样一来在预处理时执行条件编译后就不会吧同一个相同的头文件的内容包含进来,一般发型项目都是会用到条件编译,防止其他人使用头文件产生重复定义,而无法查找错误,所以每个人建立自己的头文件都应该使用条件编译。
使用条件编译后就不会出现这种重复定义的错误,希望对楼主有帮助。
其实最简单的就是 因为在fun1.h内已经
#include struct.h
在fun2中就不需要#include struct.h了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯