C++为结构体重载operator<运算符:错误,参数过多。

4

为了完成作业,学生们需要创建一个卡牌结构体,用于保存卡牌的花色、点数和位图。这个结构体需要重载"<"运算符,以便比较左手边(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;
};

然而,operator<重载声称它有太多的参数。这不是确保在一个重载中比较lhs和rhs的正确方法吗?我不需要将其拆分,对吧?

非常感谢您的帮助。

2个回答

7

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

您可以通过删除第一个参数并在 lhs 的位置使用 *this 来将其作为成员函数。否则,您可以使用惯用的解决方案并将其作为 friend

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

4
你声明了一个成员函数 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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接