前向引用声明

引用楼主 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;
};

静态数据成员的定义不在类内部,在静态存储区,因此类体有完整定义,可以创建对象。

你可能感兴趣的:(C++,c)