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++中两个类互相包含

今天突然想起一个C++的问题,如果一个类A包含类B的实例,而实例B也包含另一个类A,这种方式的代码应该怎么写,按照一般的开发者的想法的代码如下:文件A.h#include "B.h" #include...

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

抽象概括下,就是A类定义在A.h中,A类中有个B*成员;B类定义在B.h,B类同样有A*成员        解决办法,就是A类定义前面,加上class  B;一行,进行声明,在B类定义前,...

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

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

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

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

C++中两个类互相引用的解决方法

一、问题描述 现在有两个类A和B需要定义,定义A的时候需要用到B,定义B的时候需要用到A。 二、分析 A和B的定义和调用都放在一个文件中肯定是不可以的,这样就会造成两个循环调用的死循环。 根本原因是:...

java两个类相互持有引用的小问题

今天在写一个小程序中遇到一个问题,我想在两个类中相互持有引用,比如: 1. 一个类是画板,另一个类是画板中一个图形; 2. 画板必须持有图形的引用才能绘制图形; 3. 图形希望能够根据自身一些属性改变...
  • GVFDBDF
  • GVFDBDF
  • 2016年03月07日 13:56
  • 3222

类声明,解决c++两个类互相包含问题

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

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

今天遇到个编译不通过的问题,在网上找 了一下资料,原来是两个类相互包含引用的问题,下面这篇文章写的不错,圆满的解决了我的问题,特意共享一下,转载如下: 在构造自己的类时,有可能会碰到两个类之...

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

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

C++ 'include' 的两个头文件互相包含出错

头文件保护符 通常,现在写代码时都会随手在头文件中加入头文件保护符。有以下两种形式的保护符。 #ifndef ABCDE #define ABCDE //..... 内容 #endif #pragm...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++中两个类相互包含引用问题
举报原因:
原因补充:

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