错误在这里:

Rocket.cpp:31:16: error: no member named 'getThrust' in 'RocketPart'
    rocket[0]->getThrust();

当我想通过 getThrust()Engine 类访问 vector<RocketPart*> rocket 时,我从问题的顶部收到错误消息。
我究竟做错了什么?是否可以通过 Rocket[index]->getThrust() 访问它?

最佳答案

您收到的错误是正确的:在 getThrust 类中没有名为 RocketPart 的函数。您可以:

  • virtual float getThrust() 添加到您的 RocketPart 类。这可能不是一个好的解决方案,因为并非所有 RocketPart 都可以包含推力;但是,您可以简单地从中提取 return 0,或使其成为纯虚函数(这意味着您不再需要创建 RocketPart 对象
  • dynamic_cast 将您的 RocketPart 对象转换为 Engine 。这可以通过以下方式完成:
    for (size_t r = 0; r < rocket.size(); ++r){ if (const Engine* engine = dynamic_cast<Engine*>(rocket[r])) { // able to successfully convert this RocketPart into an Engine engine.getThrust(); }}

  • 您将无法转换任何不是 RocketPart*Engine

    关于C++访问抽象类指针 vector 子类的成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30280574/

    10-13 08:02