2012-04-03 3 views
1

누군가 다음 코드 (아래 다섯 줄)의 dynamic_cast가 실패하는 이유를 설명해 줄 수 있습니까? 나는 그것이 명백한 무엇인가 두렵다. 그러나 나는 그것을 볼 수 없다.Qt에서 다운 캐스팅

//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; 
} 

답변

3
Child(QObject * parent = 0) {} 

당신은 parent 포인터 아무것도 안하고있어 - 당신은 그것을 멀리 던지는 것입니다. 이 같은 QObject를 생성자에 대한 포인터를 전달해야합니다

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

를 호출됩니다 QObject의 기본 생성자 무시 부모 인수없이.

+0

내가 두려워했던 것보다 훨씬 더 분명하다 (나는 이것에 대해 새로운 것을 말할 수 있는가?) 감사합니다! – planarian