C++中两个类相互包含引用问题

原创 2012年03月26日 14:58:23
在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型

class A

{

int i;

B b;

}

class B

{

int i;

A* a;

}

请注意上面的定义内容,一般情况下是不能出现类A,类B相互引用都定义对象,即如下的样子:

class A

{

int i;

B b;

}

class B

{

int i;

A a;

}

在这种情况下,想想可以有a.b.a.b.a.b.a.b.a.b…………,很有点子子孙孙无穷尽之状,那么我的机器也无法承受。最主要的还是这种关系很难存在,也很难管理。这种定义方式类同程序中的死循环。所以,一般来说,两者的定义,至少有一方是使用指针,或者两者都使用指针,但是决不能两者都定义实体对象。

言归正传,那么,在定义时因为相互引用肯定会需要相互包含头文件,如果仅仅只是在各自的头文件中包含对方的头文件,是通不过编译的,如下:

//class A.h

#include "B.h"

class A

{

int i;

B b;

}

//class B.h

#include "A.h"

class B

{

int i;

A *a;

}

如上的包含方式可能会造成编译器有错误提示:A.h文件中使用了示知类型B。

怎么办?

一般的做法是:两个类的头文件之中,选一个包含另一个类的头文件,但另一个头文件中只能采用class *;的申明形式,而在实现文件中(*.cpp)中包含头文件,如下:

//class A.h

#include "B.h"

class A

{

int i;

B b;

}

//class B.h

class A;

class B

{

int i;

A *a;

}

//B.cpp

//在B.cpp中的文件包含处要有下面语句,否则不能调用成员a的任何内容

#include "A.h"

B::B()

{

……

}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【C++ STL】细数C++ STL 的那些事---set(元素唯一,且排序)

1)Set是一种关联容器,它用于存储数据,并且能从一个数据集合中取出数据。它的每个元素的值必须唯一,而且系统会根据该值来自动将数据排序。每个元素的值不能直接被改变。         【重点】内部结构...

【C++ STL】算法 <algorithm>中各种算法解析

一,巡防算法         for_each(容器起始地址,容器结束地址,要执行的方法) #include #include #include using namespace...

C/C++ 中头文件相互包含引发的问题

C/C++ 中头文件相互包含引发的问题 今天下午遇到一个头文件相互包含而导致的编译问题,花了我不少时间去调试没找到问题,最后晚上跟师兄讨论不少时间,突然有所顿悟! 问题重现 我把问题脱离于项目简...
  • hazir
  • hazir
  • 2014-08-16 00:39
  • 24589

【C++ Primer】两个类相互包含的求解策略

一,问题描述         A类包含B类的实例,而B类也包含A类的实例   二,求解策略           1)错误的解法 ...

C++两个类互相调用彼此的方法

两个类A和B实现互相调用彼此的方法,如果采用彼此包含对方头文件的方式会出现循环引用,所以采用了类的前置声明的方式 1,class A采用前置声明的方式声明class B 2,在ClassB的头文件...

C++中,一个类中调用另一个类

问题:C++类中数据成员为类类型时,定义为对象还是定义为指针? C++中,ClassTest objTest;就已经构造了对象,分配了空间;而在C#,Java中ClassTest objTe...

C++中两个类相互包含引用问题

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

C++ 中的嵌套类和局部类

C++ 中的嵌套类和局部类   最近趁着春节假期空闲,找了本C++ Primer 学了几章,发现C++ 中的许多特性自己都不知道。其中嵌套类和局部类感觉还是蛮有用的,简单的写写他们的用法。 嵌套...

两个互相引用对象的垃圾回收

部分转自:《深入理解java虚拟机》一书。 判断对象是否存活 1、引用计数算法 给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1。 当引用失效时,计数器值就减1。 任何时刻计数器为0的...

C++中两个类的头文件互相包含问题

抽象概括下,就是A类定义在A.h中,A类中有个B*成员;B类定义在B.h,B类同样有A*成员        解决办法,就是A类定义前面,加上class  B;一行,进行声明,在B类定义前,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)