Dynamic Cast返回null

时间:2018-03-11 01:25:14

标签: c++ polymorphism dynamic-cast

我遇到的问题是dynamic_cast返回null。我试图从卡*转向GCard *,其中GCard是派生类卡(这是多态的)。

以下是失败的代码示例。如果有人能告诉我这次失败的原因,我将不胜感激。

private Animator.AnimatorListener animatorListener = new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
        super.onAnimationEnd(animation);
        animation.removeListener(this);
        animation.setDuration(0);
        ((ObjectAnimator) animation).reverse();
    }
};

public void startAnimation(){
    animator.addListener(animatorListener);
    animator.setDuration(ANIMATION_DURATION);
    animator.start();
}

public void stopAnimation(){
    animator.end();
    // animatorListener.onAnimationEnd() will be called here
}

1 个答案:

答案 0 :(得分:1)

dynamic_cast正在返回nullptr,因为您的对象非常清楚 不是 a GCard。动态投射不是将物体转换为 的物体的神秘机制。它只是允许你使用一个对象作为子类类型,如果 已经是 那个类型。

以下操作符合您的预期:

int main(void)
{
   GCard c(Two, clubs); //Note the key change, the object **IS-A** GCard
   Card* pC = &c;

   GCard* pG = dynamic_cast<GCard *>(pC);
   if (!pG)
   {
      cout << "Dynamic cast returned null"; // This line would no longer be executed
   }
   return 0;
}