动态向下转换为抽象类(C++)

tim*_*m_a 3 c++ polymorphism casting

我试图从C++中的java中学习一些面向对象的编程方面.不过我有在使用一些困难dynamic_cast,我会用instanceofJava编写的.

我有一个基类Cell和一个派生(抽象)类Obstacle.我已经像这样定义了它:Obstacle : public Cell并且Obstacle包含一个纯虚拟析构函数.现在在Cell课堂上我想实现一个方法bool Cell::isAccesible().我已经实现了如下:

bool Cell::isAccessible() {

    Obstacle *obs = dynamic_cast<Obstacle*>(this);

    if (obs != NULL) return false;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

"运行时dynamic_cast的操作数必须具有多态类类型".

我想要实现这个的方式有什么问题?任何指导表示赞赏.

Nei*_*irk 7

Cell类必须至少有一个虚函数才能使用dynamic_cast.此外,如果Cell是您的基类,它应该有一个虚拟析构函数.

你应该使isAccessible成为虚函数并在Obstacle中覆盖它以返回false.