Как «привести» объект к классу, унаследованному его суперклассом? - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть: (псевдокод)

A_GItem_rect::A_GItem_rect ( ) : QGraphicsRectItem () ,  A_GItem_base() 

Хорошо, G_graphicsRcetItem, который, в свою очередь, наследует QGRaphicsShapeitem.

G_item_base имеет метод w_setPen().

Внутри него любая из следующих команд, означающая сбой:

((QAbstractGraphicsShapeItem *) this)->setPen(my_pen);
QAbstractGraphicsShapeItem * r = reinterpret_cast<QAbstractGraphicsShapeItem*>(this ) ;

Как я могу это исправить.Спасибо

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

Зачем вы делаете такую ​​ужасную вещь?

Когда A_GItem_rect является подклассом QAbstractGraphicsShapeItem, вам не нужно указывать указатель this для доступа к методу setPen. Простого this->setPen() должно хватить. Если вы явно хотите QAbstractGraphicsShapeItem версию метода, вы должны вызвать его следующим образом: QAbstractGraphicsShapeItem::setPen().

reinterpret_cast - это плохо ! Особенно, когда ты не знаешь, что делаешь. Если вам действительно нужно наложить объекты, попробуйте сначала dynamic_cast.

0 голосов
/ 23 ноября 2011

вы должны использовать dynamic_cast вместо этого при перемещении в иерархиях классов, а затем проверить возвращаемое значение, чтобы увидеть, если вы добились успеха (!=NULL)

...