对于作业,学生必须制作一个卡片结构,以保持卡片的套装,等级和位图。这个结构需要一个重载的“<”运算符来比较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;
};
然而,运营商&lt;过载声称它有太多参数。这不是确保lhs和rhs可以在一次重载中进行比较的正确方法吗?这不是我必须把它分开吗?
非常感谢提前。
答案 0 :(得分:5)
编译器认为这是一个成员函数,但成员函数运算符不能有多个参数。第一个参数隐式*this
,而第二个参数是你提供的参数。
您可以通过剥离第一个参数并使用*this
代替lhs
来使其成为成员函数。否则,您可以使用惯用解决方案并将其设为friend
:
friend bool operator< (const Card& lhs, const Card& rhs)
{
return lhs.m_Rank < rhs.m_Rank;
}
答案 1 :(得分:2)
您已将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);
}