练习7.31:
满足题意的程序如下所示:
class X;//声明类型X
class Y//定义类型Y
{X* x;
};
class X//定义类型X
{Y y;
};
类X的声明称为前向声明,它向程序中引入了名字X并且指明X是一种类类型。对于类型X来说,此时我们已知它是一个类类型,但是不清楚它到底包含哪些成员,所以它是一个不完全类型。我们可以定义指向不完全类型的指针或引用,但是无法创建不完全类型的对象。
如果试图写成下面的形式,将引发编译器错误。
class Y;
class X
{Y y;
};
class Y
{X*x;
};
此时我们试图在类X中创建不完全类型Y的对象,编译器给出报错信息: