我有:(伪代码)
A_GItem_rect::A_GItem_rect ( ) : QGraphicsRectItem () , A_GItem_base()
好的,G_graphicsRcetItem
依次继承QGRaphicsShapeitem
。
G_item_base
有w_setPen()
方法。
在其中的任何下一个命令意味着chrash:
((QAbstractGraphicsShapeItem *) this)->setPen(my_pen);
QAbstractGraphicsShapeItem * r = reinterpret_cast<QAbstractGraphicsShapeItem*>(this ) ;
我该如何解决这个问题。谢谢
答案 0 :(得分:2)
你为什么要做这么可怕的事?
当A_GItem_rect
是QAbstractGraphicsShapeItem
的子类时,您不必使用this
指针来访问setPen
方法。一个简单的this->setPen()
就足够了。如果您明确需要方法的QAbstractGraphicsShapeItem
版本,则必须按以下方式调用它:QAbstractGraphicsShapeItem::setPen()
。
reinterpret_cast
错误!特别是当你不知道自己在做什么的时候。如果你真的需要施放物体,先试试dynamic_cast
。
答案 1 :(得分:0)
当您在类层次结构中移动时,应该使用dynamic_cast
,然后检查返回值以查看是否成功(!=NULL
)