C++重载operator <for struct:错误参数太多

Emv*_*sch 1 c++ parameters struct operator-overloading

对于作业,学生必须制作一个卡片结构,以保持卡片的套装,等级和位图.这个结构需要一个重载的"<"运算符来比较lhs Card的Rank是否小于rhs Card并返回bool.到目前为止,这是我的Card.h文件:

#pragma once

#include "GameEngine.h"

struct Card
{

public:
//Constructor and Destructor
Card();
virtual ~Card();

//Methods
bool operator< (const Card& lhs, const Card& rhs)
{
    return (lhs.m_Rank < rhs.m_Rank);
}

//Enumerations
enum class Suit
{
    Diamonds,
    Clubs,
    Hearts,
    Spades,
};

enum class Rank
{
    RankAce,
    RankTwo,
    RankThree,
    RankFour,
    RankFive,
    RankSix,
    RankSeven,
    RankEight,
    RankNine,
    RankTen,
    RankJack,
    RankQueen,
    RankKing,
};

private:
//Datamembers
Bitmap *m_BmpPtr;
Rank m_Rank;
Suit m_Suit;
};
Run Code Online (Sandbox Code Playgroud)

然而,运算符<overload声称它有太多参数.这不是确保lhs和rhs可以在一次重载中进行比较的正确方法吗?这不是我必须把它分开吗?

提前谢谢了.

0x4*_*2D2 6

编译器认为这是一个成员函数,但成员函数操作符不能有多个参数.第一个参数是隐式的,*this而第二个参数是你提供的.

您可以通过剥离第一个参数并使用*this代替来使其成为成员函数lhs.否则,您可以使用惯用的解决方案,并使其成为friend:

friend bool operator< (const Card& lhs, const Card& rhs)
{
    return lhs.m_Rank < rhs.m_Rank;
}
Run Code Online (Sandbox Code Playgroud)