昨天跟朋友讨论了一下在C++中如果出现两个类相互引用的情况,编译无法通过的问题如何解决:
// A.h
#ifndef A_H
#define A_H
#include "B.h"
class A
{
B b;
};
#endif A_H
// B.h
#ifndef B_H
#define B_H
#include "B.h"
class B
{
A a;
};
#endif // B_H
以上代码是肯定无法编译通过的,编译器会告知如下错误:
error C2146: 语法错误 : 缺少“;”(在标识符“a”的前面)
[问题分析]
这种引用方式是在一个类中包含了另一个类的实例,如:A类中包含了B类的实例,B类中又包含了A类的实例……如果允许这种情况出现,那么在实际生成对象时,将出现递归包含,最后耗尽资源。因此,无法通过编译是再正常不过了。