- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是新来的,希望你能帮助我! :)
我的问题如下:
首先,我有这个类图:
此外,我还有另一个类 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();
似乎无法处理它:Compiler says that
getThrust() is not a member of 'RocketPart'
我明白了,但是怎么解决呢?如何在 Rocket
中声明一个 vector ,它能够包含 RocketPart
的所有子类,在 main
中如何调用 calcTWR ()
,以便它实际上返回总的推力
,而不管 vector
的内容如何?
请保持简单,我还是个初学者! ;)
最佳答案
我假设 m_parts
是指向公共(public)基类的指针 vector ?
然后你需要downcast到正确的类(class),比如
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/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
正如您在 this travis.yml 中看到的那样文件,我的代码依赖于一些第三方库,我在构建项目之前将它们安装在远程系统上。 Travis 每次推送提交时都会下载并构建这些库,这可以避免吗?我的意
我是一名优秀的程序员,十分优秀!