为了账号安全,请及时绑定邮箱和手机立即绑定

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


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)


正在回答

4 回答

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

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

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

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

using std::ostream;


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

亲测两种均有效


1 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

无职转生

这样不好
2019-09-10 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信