Qt中的向下投射

Qt中的向下投射,qt,casting,dynamic-cast,Qt,Casting,Dynamic Cast,有人能告诉我为什么下面代码中的动态_转换(底部五行)失败了吗?恐怕这很明显,但我看不见 //dynamic_cast.h #ifndef DYNAMIC_CAST_H #define DYNAMIC_CAST_H #include <QObject> class Parent: public QObject { Q_OBJECT public: Parent(QObject * parent = 0) {} }; class Child: public QObject { Q

有人能告诉我为什么下面代码中的动态_转换(底部五行)失败了吗?恐怕这很明显,但我看不见

//dynamic_cast.h
#ifndef DYNAMIC_CAST_H
#define DYNAMIC_CAST_H
#include <QObject>
class Parent: public QObject
{
 Q_OBJECT
 public:
 Parent(QObject * parent = 0) {}
};
class Child: public QObject
{
 Q_OBJECT
 public:
 Child(QObject * parent = 0) {}
};
#endif // DYNAMIC_CAST_H


//dynamic_cast.cpp
#include <iostream>
#include "dynamic_cast.h"
using namespace std;
int main (int argc, char *argv[])
{
  Parent * aParent = new Parent;
  Child * aChild = new Child(aParent);
  Parent * anotherParent = dynamic_cast <Parent *>(aChild->parent());
  if (anotherParent==0)
      cout << "Assigned null pointer" << endl;
  else cout <<"No problem!";
  return 0;
}
//动态\u cast.h
#ifndef动态铸造
#定义动态投影
#包括
类父对象:公共QObject
{
Q_对象
公众:
父对象(QObject*Parent=0){}
};
类子:公共QObject
{
Q_对象
公众:
子对象(QObject*parent=0){}
};
#endif//DYNAMIC_CAST_H
//动态_cast.cpp
#包括
#包括“dynamic_cast.h”
使用名称空间std;
int main(int argc,char*argv[])
{
家长*公寓=新家长;
Child*aChild=新子女(公寓);
Parent*anotherParent=dynamic_cast(aChild->Parent());
如果(另一个父项==0)
库特
您没有使用
父级
指针执行任何操作-您只是将其扔掉。您应该像下面这样将指针传递给QObject的构造函数:

Child(QObject * parent = 0) : QObject(parent)
{}

否则,将调用
QObject
的默认构造函数,并忽略父参数。

甚至比我担心的更明显(你能告诉我这是新手吗?)谢谢!
Child(QObject * parent = 0) : QObject(parent)
{}