在java中,有时为了对象之间的通信,会让两个类互相持有对方引用
在刚学习c++的面向对象时,为了沿用这一思路,我定义了如下两个文件。
class A{
B *b;
};
class B{
A *a;
};
然而,这段代码是错的。
因为在A中引用了B这个类,而此时还没有定义B。这是因为C++不同于java的全文检索,它是顺序的
所以要解决这个问题要怎么办呢?
c++有函数原型来解决函数中的这种先后调用问题,同样,类也可以用原型的方式来解决这种问题。
class B;
class A{
B *b;
};
class B{
A *a;
};
这样错误就消失了。
但是,如果A和B没有定义在同一个头文件中,这种方法有可能会有警告,而且A中无法访问B的信息。
此时,只要在A.cpp中不仅include "a.h",连带着b.h一起include,问题就解决了。