C++源文件中互相引用对方的头文件没问题的

小白来了个疑问:有没有A.cpp include B.h B.cpp include A.h的 ?这样做可行吗?
大佬:可以,我给你举个栗子

大佬:你的意思是cpp文件互相用到了对方h文件里的内容 吗?
是的

//a.h
class B;
class A
{
	A(B* pb);
	B* pb_;
};

///a.cpp
#include "b.h"
#include "a.h"
A::A(B* pb) :pb_(pb)
{

}

///b.h
class A;
class B
{
	B(A* pa);
	A *pa_;
};


//b.cpp
#include "a.h"
#include "b.h"
B::B(A *pa) :pa_(pa)
{

}

小白:晕(微信表情包)
大佬:c++的文件包含会是个大坑 得慢慢摸索才能找到规律
如果用到 B的指针 那么 class B; 这样申明一下即可
如果用到 B的实例或者成员方法 那么要 #include “b.h”

小白:那不包含b.h, 声明个B也没用吧

大佬:有用
表明B是个类 因为编译器要确定指针类型
假如 B类有个成员函数 f1();
如果a.cc文件里用到pb_->f1(); 这种就属于访问成员方法 必须#include “b.h”
而a.h里面不用#include “b.h” 是因为 a.h里仅仅出现了一个 B*

小白:对了
class B
{
};
B b;
不应该B b这样声明的吗

大佬:
class B
{
};
这是类的申明与定义
B b;
这是类的实例化

小白:class B;这是什么?
大佬:申明 B是个类,也是类的申明。类可以在多个地方申明多次,但只能定义一次。申明与定义这两个概念是不一样的。

小白:
class B;
class A
{
A(B* pb); //构造?
B* pb_; //成员?
};

大佬:对,开发中遇到具体的问题的时候再研究这个理解会更深刻
小白:get,暂时没有疑问了

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

困了就喝白茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值