引用楼主 ele7enjr 的回复:
C/C++ codeclass B;class A
{public:void f(B b);
};class B
{public:void g(A a);
};/*为什么书上说上面的可以,下面的不行??也没有讲明白详细的原因,不都是用类去定义了变量吗???求详细原因*/class Fred;class Barney
{
Fred x;
}class Fred
{
Barney y;
};
前向声明并没有给出定义,此时只能定义指针和引用,不能定义对象。书上的
例子只是作为函数参数,并没有定义对象,因此可以。你的例子就是定义对象了,是不行的。
不行的原因并不是存在
递归,这里是没有递归的,真正原因是Fred的定义不完整,在没有完整定义的情况下,是不能
创建对象的,就是第一次创建也无法进行,更勿论递归。
但有一个例外,就是静态数据成员,例如下面这样是可以的:
class Fred;
class Barney
{
static Fred x;
}
class Fred
{
static Barney y;
};
静态数据成员的定义不在类内部,在静态存储区,因此类体有完整定义,可以创建对象。