前向引用声明_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > 前向引用声明

前向引用声明

 2011/11/7 8:04:11  winter8  http://winter8.iteye.com  我要评论(0)
  • 摘要:引用楼主ele7enjr的回复:C/C++codeclassB;classA{public:voidf(Bb);};classB{public:voidg(Aa);};/*为什么书上说上面的可以,下面的不行??也没有讲明白详细的原因,不都是用类去定义了变量吗???求详细原因*/classFred;classBarney{Fredx;}classFred{Barneyy;};前向声明并没有给出定义,此时只能定义指针和引用,不能定义对象。书上的例子只是作为函数参数,并没有定义对象,因此可以
  • 标签:
引用楼主 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;
};

静态数据成员的定义不在类内部,在静态存储区,因此类体有完整定义,可以创建对象。
  • 相关文章
发表评论
用户名: 匿名