gpt4 book ai didi

c++ - dynamic_cast 返回空指针

转载 作者:行者123 更新时间:2023-11-28 02:48:01 31 4
gpt4 key购买 nike

为了好玩,我决定尝试制作一个简单的实体组件系统。我有一个包含所有组件的列表,我创建了一个名为 getPositionComponent 的函数,它获取实体 ID 并返回与该实体相关的位置组件。我制作的所有组件都派生自 Components 类。

struct Component
{
public:
std::string readableName;
Component::Component();
Component(std::string name);
virtual ~Component();
};

位置组件

 struct PositionComponent :
public Component
{
public:
PositionComponent(int x, int y);
~PositionComponent();
int x, y;
};

这是 getPositionComponent 的样子

PositionComponent* ComponentManager::getPositionComponent(int entityID) {
int index = entitiesLookup_[entityID] + positionComponentsLookup_[entityID];

Component *comp = &components_[index];
PositionComponent* postionComponent = dynamic_cast<PositionComponent*>(comp);

if (postionComponent != nullptr)
return postionComponent;
return nullptr;
}

当我运行它时,当我使用 dynamic_cast 时它总是返回一个 nullptr。在调试时我可以确认 Component *comp = &components_[index];返回正确的组件类型。

附带说明一下,我正在阅读一篇文章,其中针对 MMO,他们使用 SQL 来存储组件。在单人游戏中,sql 从游戏循环中的组件本地提取数据有多慢/多快?

最佳答案

我要大胆猜测一下......

您正在存储 Compoent 的列表s 在 std::vector<Component> .当您存储 Component 的派生类时在std::vector ,你失去了派生类部分。因此,dynamic_cast失败。

您可以通过存储指向 Components 的指针列表来解决该问题。在 `std::vector.

您可以通过确保基类是抽象基类来避免此类错误。

关于c++ - dynamic_cast 返回空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23728698/

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