关于友元函数的疑问
1 #include <iostream> 2 using namespace std; 3 4 class Y{ 5 6 public: 7 Y(){ 8 cout << "In class Y's constructor." << endl; 9 } 10 }; 11 12 class X { 13 friend class Y; 14 friend void f(){ 15 cout << "In class X body : call f()." << endl; 16 } 17 }; 18 19 class Z{ 20 Y *ymem; 21 public: 22 void g(){ 23 ::f(); 24 } 25 }; 26 27 28 int main() 29 { 30 X x; 31 Z z; 32 z.g(); 33 34 return 0; 35 }
<C++ primer 4th>中第12章第5节阐述friend的相关知识,按照书中代码,我在linux中做一下验证,代码如上.用gcc编译出错,提示f()函数没有定义.但在VC6中编译通过.我想可能跟编译器有关..至于大师为什么要在书中提出友元函数可以在类中定义,不知道唉...
在网上查了一下,其中有人解释说<c++语言编程>中有这样一段话:"像成员函数一样,一个友元声明不会给外围的作用域引进一个名字。......对于大型程序和大的类,一个类不能‘默不作声地’给它的外围作用域加入一些名字,维持这种性质是非常好的事情。"看到这,我觉得还是gcc是对的.

浙公网安备 33010602011771号