在定义A的时候B类未定义,因此友元声明是非法的。
必须先定义B,为了定义B必须加A类的前向引用声明。
结果如下:
class A;还有用于测试的main:
int main()你只看到编译器画的红线是没用的,VS2010的即时语法检查效果很差,必须看编译的结果。你编译一下就知道你上面程序的错误不是从那开始的。
错误不在 friend function:
#include <iostream>
using namespace std;
char* szt="1234";
#include <string.h>
class A;
class B{
//friend class A;
public: void SetValue(A&a);
};
class A{
int x;
friend void B::SetValue(A&a);
public: int getX(){ return x; };
};
void B::SetValue(A&a){
a.x=9;
}
void main(){
A a; B b;
cout<<"a.x="<<a.getX()<<endl;
b.SetValue(a);
cout<<"After B::SetValue, a.x="<<a.getX()<<endl;
return;
}
又一个这样说的。。。。