动态铸造的问题

时间:2010-08-05 17:46:57

标签: 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( );
}

3 个答案:

答案 0 :(得分:7)

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

dynamic_cast<newType>(variable)

在你的情况下,

m* q = dynamic_cast<m*>(p); 
顺便说一句,您是否混淆了mn的角色? n* p = new m是语法错误,因为基类实例无法隐式转换为派生类实例。实际上,base→derived 你实际需要dynamic_cast的情况,而不是相反(不需要强制转换)。

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

答案 1 :(得分:2)

下次,请告诉我们错误是什么!

我想你是说有一个编译错误,因为你没有使用dynamic_cast吗?你可能想说

m* q=dynamic_cast<m *>(p); 

一般来说,dynamic_cast是魔鬼。大多数实现都非常慢,可能会进行基于字符串的类名检查。除非你真的,绝对需要使用dynamic_cast,请使用任何其他可用的方法(例如static_cast)。

答案 2 :(得分:0)

两个问题,首先你不能在main的第一行分配m并将其命名为n。您在dynamic_cast中有一个合成错误。它是dynamic_cast<new type>(some var)