C++ 重载运算符<对于结构:参数错误过多

C++ Overloading operator< for struct: Error too many parameters

本文关键字:结构 参数 错误 运算符 重载 lt 于结构 C++      更新时间:2023-10-16

对于作业,学生必须制作一个卡片结构,以保留卡片的花色,等级和位图。此结构需要一个重载的"<"运算符来比较 lhs 卡的秩是否小于 rhs 卡并返回布尔值。到目前为止,这是我的 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;
};

但是,运算符

提前非常感谢。

编译器认为这是一个成员函数,但成员函数运算符不能有多个参数。第一个参数是隐式*this,而第二个参数是您提供的参数。

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

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

您已将bool operator<声明为成员函数。成员函数有一个隐式的第一个参数用于this,所以你的运算符实际上需要三个参数。您可以使用非成员来解决此问题(在您的情况下friend - 请记住friend函数是非成员函数):

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

或使用具有单个rhs参数的成员:

bool operator< (const Card& rhs) const
{
    return (m_Rank < rhs.m_Rank);
}