编译器:VS2015
问题:当我使用友元函数重载运算符 << 时,编译器报错不能访问私有成员,使用友元函数对其他运算符重载时则没有这样的问题,如图:
上网查资料后发现有两种解决办法。
第一种是将运算符重载函数的定义放在类声明中,贴上部分代码:
friend ostream & operator<<(ostream & os, const Vector & b)
{
if (b.mode == Vector::RECT)//此时b.mode未报错
os << "(x,y) =(" << b.x << "," << b.y << ")";
else if (v.mode == Vector::POLAR)
os << "(m,a) = (" << b.mag << "," << b.ang*b.Rad_to_Deg << ")";
else
os << "Vector object is invalid" << endl;
return os;
}
第二种是不要使用 using namespace std 。我把using namespace std 注释掉后b.mode果然没有报错,但是当我写 using std::ostream 之后,b.mode又出现最开始的错误,所以只能选择第一种将函数定义放在类声明中来解决这个问题。