C++ 重载运算符<对于结构:参数错误过多
C++ Overloading operator< for struct: Error too many parameters
对于作业,学生必须制作一个卡片结构,以保留卡片的花色,等级和位图。此结构需要一个重载的"<"运算符来比较 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);
}
相关文章:
- 使用不带参数的函数访问结构元素
- 将结构字段的类型展开为可变模板参数
- MSVC将仅移动结构参数解释为指针
- 如何使我的 sizeof sum 结构与空参数包一起工作
- 如何传递带有通过引用传递的结构参数的函数?
- 展开可变参数模板结构
- 在类构造函数中定义结构变量的参数
- 如何在方法中传递结构参数
- 我应该在C++中将这些结构用作参数化构造函数吗?
- 在模板方法 c++ 中传递结构参数
- 结构参数在函数调用时损坏
- 如何使用结构参数委托构造函数
- 错误 C2783:无法推断结构参数的模板参数
- 用于存储元组键的数据结构:参数关系列表
- 使用结构参数从程序集中调用C++函数
- 如何为llvm IR调用指令创建结构参数
- c++为函数使用结构参数而不是多个参数
- 导入结构参数
- 将结构参数传递给结构内的函数
- 带有结构参数的pthread不起作用