问答详情
源自:2-9 顺序表编码实战(八)

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;
}


提问者:宝慕林5283917 2020-03-09 16:16

个回答

  • qq_慕丝8285515
    2020-04-05 00:16:05

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

  • 我入戲太深
    2020-03-13 16:57:11

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

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


    个人拙见