Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重写枚举时的SIGSEGV_C++_Qt - Fatal编程技术网

C++ 重写枚举时的SIGSEGV

C++ 重写枚举时的SIGSEGV,c++,qt,C++,Qt,在重写枚举时,我得到了SIGSEGV内部赋值运算符。 我的结构: struct Pawn { private: Q_GADGET public: Q_PROPERTY(Position position MEMBER m_position) Q_PROPERTY(PawnType pawnType MEMBER m_pawnType) Pawn() : m_position(Position::NotDefined), m_pawnType(PawnType::

在重写枚举时,我得到了SIGSEGV内部赋值运算符。
我的结构:

struct Pawn
{
private:
    Q_GADGET
public:
    Q_PROPERTY(Position position MEMBER m_position)
    Q_PROPERTY(PawnType pawnType MEMBER m_pawnType)
    Pawn() :  m_position(Position::NotDefined), m_pawnType(PawnType::None) {}
    Pawn(const Pawn &a_other)
    {
        this->m_pawnType = a_other.m_pawnType;
        this->m_position = a_other.m_position;
    }
    Pawn &operator=(const Pawn &a_other)
    {
        this->m_pawnType = a_other.m_pawnType;
        this->m_position = a_other.m_position;
        return *this;
    }
    ~Pawn(){}

    enum Position
    {
        NotDefined = 0,
        Bottom,
        Left,
        Top,
        Right

    };

    enum PawnType
    {
        None = 0,
        Circle,
        Square,
        Diamond,
        Triangle,
    };

    Q_ENUMS(Position)
    Q_ENUMS(PawnType)

    Position m_position;
    PawnType m_pawnType;

};



typedef Pawn::PawnType PawnType;
typedef Pawn::Position Position;

Q_DECLARE_METATYPE(Pawn)
Q_DECLARE_METATYPE(Pawn::Position)
Q_DECLARE_METATYPE(Pawn::PawnType)
导致错误的行:

m_board[a_pawnPosition.y()][a_pawnPosition.x()] = m_board[current.y()][current.x()];
m_board[current.y()][current.x()] = Pawn();
m_板的定义

Pawn m_board[10][10];
a_pawnPosition
current
在范围内


这并不总是发生。我想可能是Q_属性导致了它,但我需要它们从QML中读取值,并且不知道如何修复它。

您是对的
current
超出了范围,因为它是引用,而不是复制的值,有时我会从
QList
之前的几行中删除它。谢谢您的回答。

获取堆栈跟踪将是一个好的开始。当发生时,
current.y()
a\u pawnPosition.y()
的值是多少?可能您希望在返回这些方法的值之前插入断言。(或者当你说它在边界内时,你的意思是这样的)请发布MCVE,一个主程序,其中
a_pawnPosition
current
,并声明和初始化+导致崩溃的代码…“它并不总是发生”,可能是UB。
a\u pawnPosition
current
是否正确初始化?a\u pawnPosition和current是否在界限内有效界限是什么?