我是新来的,希望您能帮助我! :)

我的问题如下:

首先,我有这个类图:

diagram

此外,我还有另一个类Rocket,其中有一个vector,其中应包含所有火箭零件作为生成的指针。
我的问题是Rocket类包含3种计算方法,例如:

template<typename T>
double Rocket<T>::calcTWR(){
    double thrust = 0;
    for (int i = 0; i < m_parts.size();i++){
        thrust += m_parts[i]->getThrust();
    }
    return thrust;
}


是的,我使用了模板,因为我不确定如何处理所有这些子类,因此我认为模板可能适合此处。另外,这就是问题所在,调用rocket.calcTWR();可以处理它似乎不起作用:编译器说


  getThrust()不是'RocketPart'的成员


我很了解,但是如何解决呢?我如何在Rocket中声明一个向量,该向量能够包含RocketPart的所有子类,并且在main中如何调用calcTWR(),以便实际上返回总的thrust,而无论vector的内容?

请保持简单,我仍然是初学者! ;)

最佳答案

我假设m_parts是指向通用基类的指针的向量?

然后您需要downcast到正确的类,例如

static_cast<ActualClassThisIs*>(m_parts[i])->getThrust();


请注意,这仅在类从基类继承时才有效。另请注意,如果实际的类不是您要强制转换的类,则它将不起作用。然后,您可能必须使用dynamic_cast并检查nullptr

if (dynamic_cast<ActualClassThisIs*>(m_parts[i]) != nullptr)
    dynamic_cast<ActualClassThisIs*>(m_parts[i])->getThrust();

关于c++ - 访问其对象在模板类 vector 中的特定子类函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30547632/

10-10 10:04