2

对于作业,学生必须制作一个 Card 结构来保存卡片的 Suit、Rank 和 Bitmap。这个结构需要一个重载的“<”运算符来比较 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;
};

但是 operator< 重载声称它有太多参数。这不是确保可以在一次重载中比较 lhs 和 rhs 的正确方法吗?不是说我必须分开对吧?

提前谢谢了。

4

2 回答 2

7

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

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

friend bool operator< (const Card& lhs, const Card& rhs)
{
    return lhs.m_Rank < rhs.m_Rank;
}
于 2013-10-31T14:24:43.953 回答
3

您已声明bool operator<为成员函数。成员函数有一个隐式的第一个参数 for 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);
}
于 2013-10-31T14:24:58.967 回答