【发布时间】:2013-03-14 12:02:42
【问题描述】:
我有以下代码:
using namespace std;
class BaseOk
{
public:
virtual void ImplementMe()
{
};
};
class DerivedOk : public BaseOk
{
public:
void ImplementMe()
{
}
};
class CBase { };
class CDerived: public CBase { };
int main()
{
CBase b; CBase* pb;
CDerived d; CDerived* pd;
pb = dynamic_cast<CBase*>(&d); // ok: derived-to-base
pd = dynamic_cast<CDerived*>(&b); // wrong: base-to-derived -> this doesn't compile
// Polymorphic case
BaseOk b2; BaseOk* pb2;
DerivedOk d2; DerivedOk* pd2;
pb2 = dynamic_cast<BaseOk*>(&d2); // ok: derived-to-base
pd2 = dynamic_cast<DerivedOk*>(&b2); // wrong: base-to-derived -> this returns a NULL pointer
}
带有指针“pd”的行执行向下转换,我同意它应该失败,因为结果是一个完全不同的对象。 我的问题是:为什么该行中的 dynamic_cast 根本不编译,而只是返回一个 NULL 指针?
我正在使用 MSVC2012 编译器
【问题讨论】:
-
发布您收到的错误消息
-
dynamic_cat 假定 RTTI 信息,如果您有非多态类型,则您没有任何 RTTI(尝试 dynamic_cast int 浮动,您将面临相同的情况)
-
它在 gcc 4.7 上为我编译。
标签: c++ class dynamic-cast downcast