| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3097 人关注过本帖
标题:friend类型的使用问题
取消只看楼主 加入收藏
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
结帖率:79.17%
收藏
 问题点数:0 回复次数:3 
friend类型的使用问题
class   A  
{  
private:      
    int   i;  
public:
    friend   class   B;
    class   B  
    {  
    public:  
        B(A &a)  
        {  
            a.i=0;//编译器编译到这里的时候,还没有看到后面的friend句  
        }  
    };  
    //friend   class   B;
};  

int   main()  
{  
    return   0;  
}
上述代码在 VS2005 下能通过编译,但是在VC6下不能通过,提示:
error C2248: 'i' : cannot access private member declared in class 'A'

但是换成红色的被注释,绿色的去掉注释之后,两个编译器下均能通过编译,这个为什么?
搜索更多相关主题的帖子: VS2005 版本 private friend 
2008-09-19 23:01
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
刚找到答案
对于内嵌类,按C++标准,无需进行friend声明就可以访问外围类的私有成员了,因为它位于外围类的作用域范围内。  
  有些非标编译器必须进行friend声明,那么就必须先定义内嵌类再进行friend声明。否则,按C++标准的规定,就将是声明了另外一个同名的外部类为有元。
这样看来是 VC6 没有按照标准来!
但是我由疑问,按照上面的解释:红色部分的代码并不是声明class   A 内部的class  B,而是声明class   A 外部的class  B,可class   A 外部却并没有定义class  B类型,这怎么解释??
2008-09-19 23:08
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复 3# 沼泽 的帖子
没有定义的外部类声明后,在链接的时候找不到定义 应该报错吧?可为什么不呢
2008-09-20 13:40
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
那就是我如果使用了,它才会报错?
2008-09-24 17:33
快速回复:friend类型的使用问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016093 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved