错误在这里:
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/