总所周知,我们想要调用一个类,一定要添加他的头文件。例如,class A 调用class B,
在class A 头文件中,这样子就可以了。如:
A.h

#ifndef A_H
#define A_H
#include "B.h"
class A
{
public:A();B b;
};#endif

但是,如果我想class A 调用class B , class B 调用class A呢,如果使用A的头文件包含B的头文件,B的头文件包含A的头文件,这样是否可行?
a.h

#ifndef A_H
#define A_H
#include "b.h"
class A
{
public:A();B b;
};
#endif // A_H

b.h

#ifndef B_H
#define B_H
#include "a.h"
class B
{
public:B();A a;
};
#endif // B_H

编译出错

b.h:8: error: 'A' does not name a type

所以,这样不行的。

---------------------下面才是正确的办法----------------------------------
直接上代码:
a.h

#ifndef A_H
#define A_H
class B;
class A
{
public:A();B *b;
};
#endif // A_H

a.cpp

#include "a.h"
#include "b.h"
A::A()
{
}

为什么在a.cpp中include b.h,因为需要调用b的接口。

b.h

#ifndef B_H
#define B_H
#include "a.h"
class B
{
public:B();A a;
};
#endif // B_H

还有一种办法,在A,B类头文件中相互引用头文件,将A或者B设计为单例模式。

C++ 两个类互相调用相关推荐

  1. php 两个类 相互调用_如何在 PHP 和 Laravel 中使用 Traits

    事实上,PHP 作为一门编程语言存在的问题之一,就是你只能使用单继承.这意味着一个类只能从另一个类中继承.例如,可能希望从几个不同的类继承方法,以防止代码重复.在 PHP 5.4 中 一个新的语言特性 ...

  2. Cocos Creator两个类相互引用(调用)

    如果两个类相互引用,脚本加载阶段就会出现循环引用,循环引用将导致脚本加载出错: ///Game.js var Item = require("Item"); var Game = ...

  3. php 命名空间不能继承,PHP两个类使用同一个命名空间,无法相互调用

    创建了两个类,C和D,都属于同一个namespace:func,在D的构造函数中实例化C并调用C里的cc方法,报找不到func下的C类. //C.php namespace func; class C ...

  4. cocos 时间函数需要什么引用_Cocos Creator两个类相互引用(调用)

    如果两个类相互引用,脚本加载阶段就会出现循环引用,循环引用将导致脚本加载出错: ///Game.js var Item = require("Item"); var Game = ...

  5. 两个类相互包含引用的问题--类前向声明

    在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A {     int i;     B b; } clas ...

  6. 【Groovy】Groovy 脚本调用 ( Java 类中调用 Groovy 脚本 )

    文章目录 前言 一.Groovy 类中调用 Groovy 脚本 1.参考 Script#evaluate 方法分析 Groovy 类中调用 Groovy 脚本 2.创建 Binding 对象并设置 a ...

  7. 【Groovy】Groovy 脚本调用 ( Groovy 类中调用 Groovy 脚本 | 创建 GroovyShell 对象并执行 Groovy 脚本 | 完整代码示例 )

    文章目录 一.Groovy 类中调用 Groovy 脚本 1.创建 GroovyShell 对象并执行 Groovy 脚本 2.代码示例 二.完整代码示例 1.调用者 Groovy 脚本的类 2.被调 ...

  8. Spring@Cacheable注解在类内部调用失效的问题

    如图所示,getRecomendGoogs方法里面调用findImgUrlByName方法,在findImgUrlByName方法上使用@Cacheable注解的时候,并没有走缓存. 要解决这个问题, ...

  9. [转载] 整理下java中stringBuilder和stringBuffer两个类的区别

    参考链接: Java中的StringBuffer类 StringBuilder和StringBuffer这两个类在动态拼接字符串时常用,肯定比String的效率和开销小,这是因为String的对象不会 ...

最新文章

  1. 2021年3月12日 北京格灵深瞳Java开发实习面试(一面)
  2. Bugku——Web——矛盾
  3. 新手入门 keil MDK5 建立STM32工程
  4. 利用计算机提高数学课堂教学,计算机技术在数学课堂教学中的应用微探
  5. action mutation 调用_Vuex源码学习(六)action和mutation如何被调用的(前置准备篇)...
  6. 十天学Linux内核之第七天---电源开和关时都发生了什么
  7. 360路由器刷openwrt后设置wifi中继
  8. 计算机管理的服务列表,Windows
  9. 面部识别数据研究:43年,100个数据集
  10. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记...
  11. vtkSuperquadricSource:创建以原点为中心的多边形超二次曲面
  12. Python之进程+线程+协程(进程的本质 与 threading线程模块)
  13. qml入门学习(四):附加信号Component.onCompleted和Component.onDestruction
  14. java selenium click_按钮单击selenium java
  15. 201612-2 工资计算
  16. Android RxBinding
  17. AIX双机调整DB2配置
  18. 无法远程桌面netmeeting
  19. 怎么修改PDF文件大小,PDF怎么裁剪页面
  20. service mesh:istio全

热门文章

  1. Jmeter源码分析(一)
  2. 计算机无线网络服务禁用了怎么办,无线网络禁用启用无效怎么办_无线禁用后启用不了的解决方法...
  3. esp分区创建 linux_Linux 基础知识: GPT分区基础知识及如何在GPT分区上安装WIN7
  4. 判断Linux load的值是否过高
  5. C#与SAP接口对接
  6. 批量处理作业调度工具Taskctl的Kettle转换作业类型的使用(soap服务驱动)
  7. Orbbec Inside | 奥比中光真3D刷脸门锁方案
  8. freeCodeCamp----arithmetic_arranger练习
  9. 类似淘宝详情页SKU页面
  10. 企业财务制度二--会计科目名称和编号(一)1122 应收利息(转载)