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

operator==()运算符重载为什么不能声明为友元函数?

#pragma once
#ifndef COORDINATE_H
#define COORDINATE_H
#include <iostream>
using namespace std;
class Coordinate{	
public:	
friend bool operator==(Coordinate &, Coordinate &);	
friend ostream& operator<<(ostream &os, Coordinate &coor);	
Coordinate& operator=(const Coordinate &rhs);
	
Coordinate(int x=0, int y=0);	
Coordinate(const Coordinate &rhs);	
//void printCoordinate();
protected:
private:	
int m_iX;	
int m_iY;
};
Coordinate::Coordinate(int x, int y)
{	
m_iX = x;	
m_iY = y;
}
Coordinate::Coordinate(const Coordinate &rhs)
{	
m_iX = rhs.m_iX;	
m_iY = rhs.m_iY;
}
Coordinate & Coordinate::operator=(const Coordinate &rhs)
{	
m_iX = rhs.m_iX;	
m_iY = rhs.m_iY;	
return *this;
}
ostream& operator<<(ostream &os, Coordinate &coor)
{	
os << "(" << coor.m_iX << "," << coor.m_iY << ")" << endl;
return os;	
}
bool operator==(Coordinate &lhs,Coordinate &rhs)
{	
if (lhs.m_iX==rhs.m_iX&&lhs.m_iY==rhs.m_iY)		
return true;	
else		
return false;	
} 
#endif // !COORDINATE_H

operator==运算符重载仍然在下面这个成员函数中报错

int MyList::LocateMyList(Coordinate * p)
{	
for (int i = 0; i < m_iLength;i++)	
{		
if (m_pList[i] == *p)	//error:没有与这些操作数匹配的"=="运算符		
return i;	
}	
return -1;
}


正在回答

代码语言

2 回答

老师好像是说 ==只传进去一个参数 ,所以就不需要用友元函数重载

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

你在函数申明的时候,参数都没写。

==运算符重载的时候,传入一个参数就行,是比较传入参数和当前参数。  你写的传入了2个参数


个人拙见

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

宝慕林5283917 提问者

查了相关资料,= =运算符作为二元运算符重载时是可以作为友元函数并且需要传入两个参数的。关于函数声明时是否需要写入形参名称,在C++ Primer中有提到函数在声明时形参名称可以不用写出来。我在写另外一个例子时,使用同样的实现没有报错。所以感觉很奇怪。
2020-03-23 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

operator==()运算符重载为什么不能声明为友元函数?

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