Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > C/C PLUSPLUS > » 正文

前向引用声明

来源: 未知 分享至:
引用楼主 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; };

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

Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史