LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1419|回复: 16

C++中的friend问题

[复制链接]
发表于 2005-9-1 22:42:38 | 显示全部楼层 |阅读模式

  1. #include <iostream>

  2. struct X {
  3.         private:
  4.         int i;
  5.         public:
  6.         struct Y {
  7.                 public:
  8.                 void print(struct X& x) {
  9.                         std::cout << x.i << std::endl;
  10.                 }
  11.         };
  12. };

  13. int main(int argc, char *argv[])
  14. {
  15.         struct X x;
  16.         struct X::Y y;
  17.         y.print(x);
  18.         return 0;
  19. }
复制代码

为什么struct X中没有用friend修饰struct Y,编译也没出错。
发表于 2005-9-2 09:22:37 | 显示全部楼层
那是编译器的问题了,或者编译器认为这样挺好
To allow nested classes to access the private members of their surrounding class; to access the private members of other nested classes; or to allow the surrounding class to access the private members of its nested classes, the friend keyword must be used.
                                          --------------- from C++ Annotations Version 6.2.2 BY Frank B. Brokken
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-2 09:30:32 | 显示全部楼层
Post by rickxbx
那是编译器的问题了,或者编译器认为这样挺好
To allow nested classes to access the private members of their surrounding class; to access the private members of other nested classes; or to allow the surrounding class to access the private members of its nested classes, the friend keyword must be used.
                                          --------------- from C++ Annotations Version 6.2.2 BY Frank B. Brokken


我用的是gcc4, <<thinking in c++>>里也说需要加friend. :ask
回复 支持 反对

使用道具 举报

发表于 2005-9-2 09:44:03 | 显示全部楼层
如果有条件,可以用其他编译器试试,比如vc...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-2 09:46:26 | 显示全部楼层
只装了FC4,没有windows。
回复 支持 反对

使用道具 举报

发表于 2005-9-5 23:15:28 | 显示全部楼层
Post by daemeon
我用的是gcc4, <<thinking in c++>>里也说需要加friend. :ask

我用的是gcc4, <<thinking in c++>>里也说需要加friend.
------------------------------------------------------------------
为什么要加friend函数呢,能说明一下原因吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-5 23:40:20 | 显示全部楼层
因为Y里的print要访问 X里的私有变量i
回复 支持 反对

使用道具 举报

发表于 2005-9-7 17:58:35 | 显示全部楼层
在Visual C++.Net 2003中测试,仍然没有报错。看来都不够符合标准啊!

有人在号称100%符合标准的Borland C++BuilderX里面试一试吗?或者Intel C++ Compiler 8.1以上版本?
回复 支持 反对

使用道具 举报

发表于 2005-9-7 20:39:34 | 显示全部楼层
Y 是 X  的内部结构,就像 X 的一个方法要访问 X 的私有成员,不用 friend 吧。
个人愚见
回复 支持 反对

使用道具 举报

发表于 2005-9-7 20:44:55 | 显示全部楼层
Post by manphiz

有人在号称100%符合标准的Borland C++BuilderX里面试一试吗?

确实是号称,至少有一个关键字不支持
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表