今天在使用QSet时碰见了一些奇怪的问题,不知道从哪里下手,麻烦各位佬指导一下
自定义类

对m_cards这个集合进行操作时报错

今天在使用QSet时碰见了一些奇怪的问题,不知道从哪里下手,麻烦各位佬指导一下
自定义类

对m_cards这个集合进行操作时报错

关注让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
如果答案让您满意,请采纳、关注,非常感谢!问题可能出在你自定义的PlayingCard类中,可能出现了深拷贝或者浅拷贝的问题。在QSet里存放的元素是按值进行存储的,对于自定义类,需要正确实现拷贝构造函数和赋值运算符重载,以确保在QSet容器中进行操作时不会出现问题。 以下是一个示例自定义类PlayingCard的代码,包括拷贝构造函数和赋值运算符重载的实现:
#include <QString>
class PlayingCard
{
public:
PlayingCard() : m_suit(""), m_rank(0) {}
PlayingCard(const QString &suit, int rank) : m_suit(suit), m_rank(rank) {}
// 拷贝构造函数
PlayingCard(const PlayingCard &other)
{
m_suit = other.m_suit;
m_rank = other.m_rank;
}
// 赋值运算符重载
PlayingCard& operator=(const PlayingCard &other)
{
if (this != &other)
{
m_suit = other.m_suit;
m_rank = other.m_rank;
}
return *this;
}
// 定义比较规则,用于QSet中排序
bool operator<(const PlayingCard &other) const
{
if (m_rank == other.m_rank)
return m_suit < other.m_suit;
return m_rank < other.m_rank;
}
private:
QString m_suit;
int m_rank;
};
在使用QSet时,将自定义类PlayingCard作为元素进行存储,确保正确实现了拷贝构造函数、赋值运算符重载和比较规则,可以避免遇到报错问题。希望以上代码对您有所帮助,欢迎进一步交流讨论。