我有一个关于遗传变量的问题。我的源代码的一部分:
class Piston{ //abstract class
... //virtual functions
};
class RectangularPiston: public Piston
{
... //non virtual implementation of the Piston functions
bool setGridSize(...) //this function doesn't exists in the Piston class
{
...
}
}
class Transducer{ //abstract class
... //virtual functions
protected:
Piston *m_piston;
};
class RectilinearTransducer: public Transducer
{
... //non virtual implementation of the Piston functions
bool setGridSizeOfPiston(...)
{
return m_piston->setGridSize(...); //doesn't work
}
}RectilinearTransducer拥有一个m_piston,它总是一个RectlinearPiston!但是m_piston是由Transducer类继承的,我不能使用setGridSize()-function。
错误消息:错误C2039:'setGridSize':不是‘活塞’的元素 函数setGridSize不存在于活塞类中.
我该如何解决这个问题?我应该像用虚拟函数那样覆盖m_piston变量吗?m_piston变量作为Piston* m_piston存在,因为我通过Transducer类继承它。
谢谢你的帮助
发布于 2013-08-04 01:43:03
如果您不能在父类中使setGridSize成为一个虚拟函数,那么您可能希望添加一个函数,该函数简单地将m_piston转换为RectangularPiston*,然后在类需要引用m_piston时调用该函数。
RectangularPiston* getRecPiston() {
return static_cast<RectangularPiston*>(m_piston);
}
bool setGridSizeOfPiston(...) {
return getRecPiston()->setGridSize(...)
}发布于 2013-08-04 01:39:26
您需要使setGridSize成为Piston的虚拟函数(无论是纯虚拟的还是其他的)。
e.g
class Piston {
protected: (or public)
virutal bool setGridSize(..) = 0;
...https://stackoverflow.com/questions/18038933
复制相似问题