在构造本身的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类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() { …… } 两个类互相用包含 2009-06-14 00:15 当两个类互相包含 互相在本类中定义另一个类的对象指针引用时候 由于必须保证当一个类先声明或者定义时候才能够在另一个类中使用 因此对于类A B 须要在类A中定义一个B类的对象 指针或引用 在B类中定义一个A类的对象 这样互相包含 时候 就须要先在类中什么一下要用的类 如在类A的前面声明Class B 在B类前声明Class A 而后在头文件或者CPP文件中加入B.H 或则A.h 这样就能够互相定义而不产生错误了 可是要注意的是上述的方法是只适用于用来定义类指针或者类应用 而不能来定义类对象变量或者函数的变量名 这是由于上面仅仅声明了类 说明这个类是一个标识 尚未实现因此不能定义对象变量 可是对于若是想要在一个类中定义对象来讲好比 在A,H文件中定义B类对象这样的话 就须要 在A.H中包含B类头文件 #include “B.H” 我以为吧 只有包含了一个类的头文件 这样至关于把这个类定义插入到里面了 因此能够直接定义对象 定义对象须要实在的内容 而不只仅是知识声明一下类 说明这个类是个标识 必须定义好实体内容 这样才能够 定义变量 而这种状况下 不能两个类互相包含了 我通常所见的内容就是定义了B类对象变量后 则只能在B.H中定义 A类指针或者引用了 因此就在B.H里面声明 CLASS A; 声明了 就是如此了 确实通常都是如此 两个类一个包含头文件 另一个声明类 另外在实现文件中固然还得包含这个头文件了 不要忘了这个 而觉得不用包含头文件 仅仅声明了类就OK 因此一旦是个类名字声明 则只能是定义对象指针或引用(不管是单个定义仍是对于函数参数 定义都如此) 包含就均可以了 我以为不能每一个里面都定义对象变量 最多一个 不然会产生 死循环 只是不知道要是须要定义两个对象变量 或者三个类或以上的这样时候会怎么样啊 却是确实是当UpdateData(FALSE)是把数据从变量传递到控件中 而TRUE是把控件中内容传递到变量中 两个不一样的类相互引用的状况下头文件包含问题