Re-(#in-clude)
17 Jul 2020
1 min read
之前写过一篇关于 #ifndef 与 #pragma once 的博客
但是事情好像不是那么简单
错误样例
A.h
(#in-clude) "B.h"
class A : public B
{
};
B.h
(#in-clude) "A.h"
class B
{
};
错误原因分析
如果我没记错,这种因为 h 文件互相引用而导致的重定义之前弄的我莫名其妙
按照之前看 #ifnedf 的解释,内容一样不应该被编译器重复添加而导致重定义
但是它确实就存在这样了
网上查询好像还没有找到合适的解释(我还没看官方文档,只看了 CSDN (^_^)a
解决方案
根据看到的一些文章,解决方案无非两种
尽量改为 cpp 文件引用
cpp 文件不会被再次引用,所以可以更放心的用 #in-clude
但是也要注意,cpp 文件的引用里可能会有冲突
改为类声明
在错误样例中,A.h 文件改为
class B;
class A : public B
{
};
对类B进行声明