重写枚举时的sigsegv
SIGSEGV when rewriting enums
我在重写枚举时,我在分配运算符中获得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_board
的定义:
Pawn m_board[10][10];
a_pawnPosition
和 current
处于边界
并不总是发生。我想q_property可能会导致它,但是我需要它们从QML读取值,并且不知道如何修复它。
你是对的。current
不超出范围,因为它是参考,而不是复制的值,有时我以前从QList
删除它。感谢您的回答。
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 标准::可选枚举的比较运算符
- C++两个源文件之间共享的枚举的静态实例
- 打印没有铸件的枚举可以在C++中吗?
- 枚举成员与静态 int 成员?
- C++:枚举:错误:应使用标识符而不是"}"
- 带有 c++ 的枚举(输入检查)
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 重写枚举时的sigsegv
- 使用枚举的奇怪SIGSEGV(分段错误)