0%

Re-(#In-Clude)

之前写过一篇关于 #ifndef#pragma once 的博客
但是事情好像不是那么简单

错误样例

A.h

1
2
3
4
5
(#in-clude) "B.h"

class A : public B
{
};

B.h

1
2
3
4
5
(#in-clude) "A.h"

class B
{
};

错误原因分析

如果我没记错,这种因为 h 文件互相引用而导致的重定义之前弄的我莫名其妙

按照之前看 #ifnedf 的解释,内容一样不应该被编译器重复添加而导致重定义
但是它确实就存在这样了
网上查询好像还没有找到合适的解释(我还没看官方文档,只看了 CSDN (^_^)a

解决方案

根据看到的一些文章,解决方案无非两种

尽量改为 cpp 文件引用

cpp 文件不会被再次引用,所以可以更放心的用 #in-clude
但是也要注意,cpp 文件的引用里可能会有冲突

改为类声明

在错误样例中,A.h 文件改为

1
2
3
4
5
class B;

class A : public B
{
};

对类B进行声明

Welcome to my other publishing channels