C++ 动态强制转换返回null
我面临一个问题,动态_cast返回null。我试图从一张卡片*向下转换到GCard*,其中GCard是一个派生的卡片类(它是多态的) 下面是失败的代码示例。如果有人能告诉我这次失败的原因,我将不胜感激C++ 动态强制转换返回null,c++,polymorphism,dynamic-cast,C++,Polymorphism,Dynamic Cast,我面临一个问题,动态_cast返回null。我试图从一张卡片*向下转换到GCard*,其中GCard是一个派生的卡片类(它是多态的) 下面是失败的代码示例。如果有人能告诉我这次失败的原因,我将不胜感激 class Card { public: Card(Rank, Suit); virtual ~Card(); void SetSelected(bool selected); Suit mSuit; Rank mRank; bool mSelected; }
class Card
{
public:
Card(Rank, Suit);
virtual ~Card();
void SetSelected(bool selected);
Suit mSuit;
Rank mRank;
bool mSelected;
};
class GCard : public Card
{
public:
GCard(Rank, Suit);
virtual ~GCard();
void LoadTexture();
void SetDepth(int);
sf::Sprite mSprite;
int mDepth;
private:
sf::Texture mTexture;
};
int main(void)
{
Card c(Two, clubs);
Card* pC = &c;
GCard* pG = dynamic_cast<GCard *>(pC);
if (!pG)
{
cout << "Dynamic cast returned null"; // This line is being executed
}
return 0;
}
类卡
{
公众:
卡片(等级、套装);
虚拟卡();
选择无效设置(选择布尔值);
西服;
秩mRank;
选择布尔值;
};
信用卡类别:公共卡
{
公众:
GCard(等级、诉讼);
虚拟的~GCard();
void LoadTexture();
空隙深度(int);
sf::雪碧mSprite;
int-mDepth;
私人:
sf:纹理纹理;
};
内部主(空)
{
c卡(两个,俱乐部);
卡*pC=&c;
GCard*pG=动态铸造(pC);
如果(!pG)
{
coutdynamic\u cast
正在返回nullptr
,因为您的对象显然不是GCard
。dynamic cast不是一种神秘的神奇机制,它可以将对象转换为不属于的对象。它所做的只是允许您在对象已读取时将其用作子类类型y是那种类型的
以下操作将按照您的预期进行:
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;
}
int main(无效)
{
GCard c(两个,梅花);//注意键的变化,对象**是-A**GCard
卡*pC=&c;
GCard*pG=动态铸造(pC);
如果(!pG)
{
coutc
被实例化为Card
。你为什么希望这里有不同的东西呢?谢谢你,克雷格。我完全错过了。我知道这个对象首先应该是一个GCard。