每当我尝试运行此代码时,此代码都会返回错误。有人可以帮帮我吗。
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( );
}
答案 0 :(得分:7)
这些C ++强制转换运算符应该用作
dynamic_cast<newType>(variable)
在你的情况下,
m* q = dynamic_cast<m*>(p);
顺便说一句,您是否混淆了m
和n
的角色? 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)
。