• 8071阅读
  • 4回复

[提问]为什么不能将基类指针转换为子类指针? [复制链接]

上一主题 下一主题
离线feixing1
 

只看楼主 正序阅读 楼主  发表于: 2011-08-19
invalid static_cast from type 'QEvent*' to type 'QGraphicsSceneMouseEvent*'


QGraphicsSceneMouseEvent 是 QEvent 的子类,为什么在这里不可以用static_cast进行强制类型转换呢?使用dynamic_cast也通不过编译
离线jdwx

只看该作者 4楼 发表于: 2011-08-27
回 3楼(hicjiajia) 的帖子
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线hicjiajia

只看该作者 3楼 发表于: 2011-08-27
作者你说为什么这里不能将父类指针转为子类指针,难道说你以前都成功了?我记得当时学C++时 《C++Primer》中好像特意强调过不可以这样转,就算转换成功会留下安全隐患,如果指针一旦引用子类代码,也就是原本不属于它的代码会崩溃…
离线feixing1

只看该作者 2楼 发表于: 2011-08-20
引用第1楼XChinux于2011-08-19 18:58发表的  :
代码?

  1. bool SinglePageControl::eventFilter(QObject *obj, QEvent *event)
  2. {
  3.     Q_UNUSED(obj);
  4.     if(event->type() == QEvent::GraphicsSceneMousePress)
  5.     {
  6.         this->mousePressEvent(reinterpret_cast<QGraphicsSceneMouseEvent*>(event));
  7.     } else if(event->type() == QEvent::GraphicsSceneMouseMove)
  8.     {
  9.         this->mouseMoveEvent(reinterpret_cast<QGraphicsSceneMouseEvent*>(event));
  10.     } else if(event->type() == QEvent::GraphicsSceneMouseRelease)
  11.     {
  12.         this->mouseReleaseEvent(reinterpret_cast<QGraphicsSceneMouseEvent*>(event));
  13.     }
  14.     return false;
  15. }

这里如果用static_cast或者dynamic_cast则通不过编译,不知为何
离线XChinux

只看该作者 1楼 发表于: 2011-08-19
代码?
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个