zxWang_stu 2025-01-07 16:47 采纳率: 14.3%
浏览 8

QSet使用insert方法时报错

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

自定义类

img

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

img

  • 写回答

2条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-01-07 16:48
    关注
    让【道友老李】来帮你解答,本回答参考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作为元素进行存储,确保正确实现了拷贝构造函数、赋值运算符重载和比较规则,可以避免遇到报错问题。希望以上代码对您有所帮助,欢迎进一步交流讨论。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月7日