gpt4 book ai didi

C++:从 ‘BaseNode*’ 到 ‘Match*’ 的无效转换

转载 作者:搜寻专家 更新时间:2023-10-31 01:23:57 24 4
gpt4 key购买 nike

我程序中的所有对象都继承自容器类。 Container 类有一个 virtual BaseNode* getParent() const;方法和 virtual void setParent(BaseNode *p);方法。

我有一个 Set类(在网球比赛中设置,而不是数据结构)具有 Match类作为它的父级(通过 setParent() )但是自 Set继承自 Container , 程序自上而下创建树结构,Set类是一个 child ,它不需要有方法来跟踪和维护关于它的 parent 的信息,而不是Container提供。

错误C++: invalid conversion from ‘BaseNode*’ to ‘Match*’当我尝试编译我的程序时出现在下面的方法中。 (Player* getPlayer1() const; 只存在于Match 类中)

Player* Set::getPlayer1() const{
return getParent()->getPlayer1();
}

这是我的 Match 继承结构。 (注意 TreeNode 是模板)

Match -> TreeNode<Set> -> BaseNode -> Container

我不明白为什么会出现对话错误。我试过阅读我的教科书,但它的引用资料很差。 Google 只是提供了太多不相关的信息。

编辑

Player* Set::getPlayer1() const{
return dynamic_cast<Match>(getParent())->getPlayer1();
}

原因

error: cannot dynamic_cast ‘#‘obj_type_ref’ not supported by dump_expr#<expression error>((&((const Set*)this)->Set::<anonymous>))’ (of type ‘class BaseNode*’) to type ‘class Match’ (target is not pointer or reference)

编辑2

我刚刚意识到我需要 dynamic_cast<Match*>哪个有效。

最佳答案

问题是 getParent() 返回一个 BaseNode*,它可能是指向任何类型的 BaseNode 的指针 - 它可能指向到一个不相关的类,该类也派生自 BaseNode。如果您 100% 确定父级必须是 Match 类型,您应该首先将父级转换为 Match*,然后您可以调用 getPlayer () 关于:

Player* Set::getPlayer1() const{
return dynamic_cast<Match*>(getParent())->getPlayer1();
}

如果父级不需要 Match,则 dynamic_cast 可能会返回 NULL,因此请务必进行检查。

关于C++:从 ‘BaseNode*’ 到 ‘Match*’ 的无效转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/341668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com