c++中两个类相互包含引用的相关问题
在构造自己的类时,可能会遇到两个类相互引用的问题。
例如:
class A
{
int i;
B b;
};
class B
{
int i;
A a;
};
在这种情况下,这样就会出现一个死循环a.b.a.b.a.b....,一般来说,应避免这种情况。
如果确实需要的话,一般来说,至少有一方需要定义成指针。
例如:
class A
{
int i;
B b;
};
class B
{
int i;
A* a;
};
如果按照以上的方式,既然存在互相引用,就必须互相包含头文件,如果仅仅是在自己的头文件中包含另外一个头文件,这样是没法编译通过的。怎样解决这个问题呢?
一般的做法是:两个类的头文件中,选择一个包含另外一个头文件。而另外一个头文件中只能以class *的形式声明,而在类的实现文件中包含头文件。
具体为:
//A.h
#include "B.h"
class A
{
int i;
B b;
};
//B.h
class A;
class B
{
int i;
A* a;
};
//B.cpp
#include "A.h"
...
c++中两个类相互包含引用的相关问题的更多相关文章
- 多态时最好将基类的析构函数设为virtual、 C++中两个类相互包含引用问题 (转载)
多态:http://blog.csdn.net/tmljs1988/article/details/8146521 C++中两个类相互包含引用问题:http://blog.csdn.net/leo11 ...
- C++中两个类相互包含引用问题
在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { int i; B b; } class B { in ...
- C++两个类相互包含引用的问题
在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { B b; } class B { A* a; } 请 ...
- C++中两个类相互include的问题
在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 例如: Cup.h #ifndef CUP_H #define CUP_ ...
- 转载:C++中两个类中互相包含对方对象的指针问题
原文链接:http://www.cnblogs.com/hanxi/archive/2012/07/25/2608068.html 前几天很不爽,因为C++中两个类中互相包含对方对象的指针编译时提示某 ...
- Cocos Creator两个类相互引用(调用)
如果两个类相互引用,脚本加载阶段就会出现循环引用,循环引用将导致脚本加载出错:///////////Game.jsvar Item = require("Item");var Ga ...
- 关于node中两个模块相互引用却不会死循环的问题
关于node中两个模块相互引用却不会死循环的问题 node中是通过require来导入加载模块的,require有两个作用: 1.加载文件模块并执行里面的代码 2.拿到被加载文件模块导出的接口对象 现 ...
- c++两个类相互调用
有可能会碰到两个类之间的相互调用的问题,例如:定义了类A和类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { B b; }; class B { A a; }; 编译器在声明A ...
- C++学习笔记一 —— 两个类文件互相引用的处理情况
先记录一些零碎的知识点: 1. 一个类可以被声明多次,但只能定义一次,也就是可以 class B; class B; class B; ……; class B {……}; 这样子. 2. 一个 ...
随机推荐
- 四B象限图
- CCF CSP 201512-3 画图
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201512-3 画图 问题描述 用 ASCII 字符来画图是一件有趣的事情,并形成了一门被称为 ...
- ASP.NET WebAPI 04 Model绑定
在前面的几篇文章中我们都是采用在URI中元数据类型进行传参,实际上ASP.NET Web API也提供了对URI进行复杂参数的绑定方式--Model绑定.这里的Model可以简单的理解为目标Ancti ...
- LoadRunner11-遇到问题及解决办法(汇总)
LoadRunner11-遇到问题及解决办法 1.LoadRunner超时错误:在录制Web服务器端,如果超过120秒服务器协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同.错 ...
- Django实战(7):改造ProductList界面
有了上一节关于Django模板的基础,改造界面就很容易理解了.将界面设计师设计的页面中的内容根据复用程度分别放到基础模板base.html和专用模板productlist.html中. depot/t ...
- 【Java】 参数的传递:值传递与引用传递讨论
内容稍多,可直接看第4点的讨论结果 前言 在涉及到传递参数给方法时,容易出现一些参数传递错误的问题,这就涉及到了参数的传递问题,必须搞清楚:参数是如何传递到方法中的?一般来说,参数的传递可以分为两种: ...
- Ubuntu 17.04 搭建 NodeJS
可以在云主机上执行以下的命令: apt-get update apt-get install -y python-software-properties software-properties-com ...
- 这套完美的Java环境安装教程,完整,详细,清晰可观,让你一目了然,简单易懂。⊙﹏⊙
JDK下载与安装教程 2017年06月18日 22:53:16 Danishlyy1995 阅读数:349980 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...
- .NET Core改造工程直播
[背景] 新项目需要跨平台,原来积累的.NET类库需要改造为.NET Core. [直播] 新增加的项目不支持排除文件 不支持定义条件编译常量,虽然在项目中能使用#if语法,但无地方定义DefineC ...
- python线程join
几个事实 1 python 默认参数创建线程后,不管主线程是否执行完毕,都会等待子线程执行完毕才一起退出,有无join结果一样 2 如果创建线程,并且设置了daemon为true,即thread.se ...