我遇到的问题是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
}
答案 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;
}