这个问题是我在刚开始做三级项目时发现的,当我写了三个头文件、一个cpp文件后,发现vs弹出了错误。
其中,GENDER和HAIR_TYPE是我在其中base头文件定义的两个枚举类型,它们在另外两个头文件都有调用。
经过我对重定义的查找,发现了它的定义。
由于头文件重复包含了所定义的变量或者常量,编译器就会报重复定义的错误。
意思是我在另外两个头文件都定义过GENDER和HAIR_TYPE,于是发生了声明冲突。
那么问题找到了,理论上减少一次定义就可以了。不幸的是,我的两个头文件都必须使用GENDER和HAIR_TYPE这两个枚举类型。
不过天无绝人之路,仍有十分可行的办法解决这个重定义问题,以下即为解决方法:
在出现重定义错误的头文件加上:
#ifndef FileName_H_
#define FileName_H_
//插入头文件内容
#endif
我们只用在 #define FileName_H_ 与#endif之间写入我们的头文件代码就可以了。这里的FileName_H_尽量使用文件名大写+_H_这种形式,但是要保证这个名字没有被使用。
事实上,这个问题还有更好的解决办法。
在你生成一个头文件时,vs自动帮你生成一句:
#pragma once
这个与上面的效果是一样的,所以二选一即可,个人比较推荐第一种。