动态铸造的问题

bre*_*ett 3 c++

每当我尝试运行此代码时,此代码都会返回错误.有人可以帮帮我吗.

struct m
{
    virtual int s( )
    { 
        return 1;
    }
};

struct n : public m
{
    int s( )
    { 
        return 2;
    }
};

int o( )
{
    n* p=new m;
    m* q=dynamic_cast<p>;
    return q->s( );
}
Run Code Online (Sandbox Code Playgroud)

ken*_*ytm 7

应该使用这些C++强制转换运算符

dynamic_cast<newType>(variable)
Run Code Online (Sandbox Code Playgroud)

在你的情况下,

m* q = dynamic_cast<m*>(p); 
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你迷惑的作用mnn* p = new m是一个语法错误,因为基类实例不能隐式转换为派生类实例.事实上,base→derived 你实际需要的情况dynamic_cast,而不是相反的方式(不需要强制转换).

另外,考虑为对象提供有意义的名称.