C++源文件中互相引用对方的头文件没问题的
Posted 有关于S27的故事
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,暂时没有疑问了
以上是关于C++源文件中互相引用对方的头文件没问题的的主要内容,如果未能解决你的问题,请参考以下文章