父类向子类转换问题

zy765 2012-07-22 08:28:41
我有这样的需求,在一颗导航树中有四类节点,因此我创建了一个基类NaviTreeItem,继承自QTreeWidgetItem,对了,我使用的是QT。然后又派生出了四个子类:

// 在导航树对象上添加新节点
NaviTreeItem *item = createItem(element, parentItem);

if (strNodeType.compare(c_strRoot) == 0)
{
RootTreeItem* rootItem = dynamic_cast<RootTreeItem*>(item);
rootItem ->setIcon(0, EGMISClient::getThemeIcon( "rootitem.png" ));
}

当运行到
rootItem ->setIcon(0, EGMISClient::getThemeIcon( "rootitem.png" ));
出现错误
Client.exe 中的 0x00ee4339 处有未经处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突。

这样不行吗?请教大家了
...全文
63 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2012-07-22
  • 打赏
  • 举报
回复
从父类指针到子类指针转换,叫做向下转型,未必是安全的。反之,则总是安全的。

比如:
class A : public B
{};

class C : public B
{};

如果这么写:
B* pba = new A;
B* pbc = new C;
...
A* pa = dynamic_cast<B*>(pba); // 向下转型,OK,因为pba本身就是指向一个A对象的
B* pb = dynamic_cast<B*>(pba); // 向下转型,NOT OK

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧