问答详情
源自:3-2 案例完善

运算符重载的时候出错??


ostream &operator<<(ostream &out,Coordinate &coor)

{

out<<"("<<coor.m_iX<<","<<coor.m_iY<<")"<<endl;

return out;

}

--------------------Configuration: 栈 - Win32 Debug--------------------

Compiling...

Coordinate.cpp

G:\VC++ 6.0\MyProjects\栈\Coordinate.cpp(17) : error C2248: 'm_iX' : cannot access private member declared in class 'Coordinate'

        g:\vc++ 6.0\myprojects\栈\coordinate.h(13) : see declaration of 'm_iX'

G:\VC++ 6.0\MyProjects\栈\Coordinate.cpp(17) : error C2248: 'm_iY' : cannot access private member declared in class 'Coordinate'

        g:\vc++ 6.0\myprojects\栈\coordinate.h(14) : see declaration of 'm_iY'

执行 cl.exe 时出错.


栈.exe - 1 error(s), 0 warning(s)


提问者:Lydia_Lv 2016-05-27 17:17

个回答

  • 慕村3311326
    2017-01-06 22:25:49

    这据说是VC的一个经典BUG。和namespace也有关.  

    只要含有using namespace std; 就会提示友员函数没有访问私有成员的权限。 

    解决方法:去掉using namespace std;换成更小的名字空间。  

    using std::endl; using std::cout;

    using std::ostream;


    或者将重载运算符函数放在Coordinate类中去定义。

    亲测两种均有效


  • 汐汐酱
    2016-08-13 22:29:22

    应该是VC++6.0的问题,把私有改成共有就行了,就是破坏了类的封装

  • 汐汐酱
    2016-08-13 22:24:05

    我的也是这样的,在类里有friend也不可以QAQ说是不能访问private成员

  • 淡忧R
    2016-05-29 23:28:58

    可以加个friend,这样就能private成员