请教一个Dynamic_cast的问题!
#include "stdafx.h "
#include <iostream>
using namespace std;
class CCar;
class CQQ;
class CCar
{
public:
CCar(){
}
virtual CCar Clone(CCar* prhs){
cout < < "Car_Clone " < < endl;
}
};
class CQQ: public CCar
{
public:
CQQ Clone(CQQ* prhs)
{
cout < < "CQQ_Clone " < < endl;
}
private:
CQQ(const CQQ&){}
};
int main(int argc, char* argv[])
{
////////////// VC6.0 Compile
CCar* pCar = new CCar;
CQQ* pQQ = (CQQ*)(pCar); //这样可以
//CQQ* pQQ = dynamic_cast <CQQ*> (pCar); //这里打开后出异常,为什么
if ( pQQ)
{
pQQ-> Clone( (CQQ*)pCar );
}
return 0;
}
[解决办法]
有没有打开rtti
[解决办法]
VC?
RTTI没有打开?
[解决办法]
请打开Project Setting中的C/C++Page下的RTTI选项。应该就OK了。
[解决办法]
pCar 目前事实上指向一个 基类对象, 而要将它转向一个派生类对象, 这是个明显错误呀.
派生类 比 基类包含了更多的信息. 基类对象是派生类对象的子对象.
只有当, pCar 事实上指向一个派生类对象时(或派生类的派生类), dynamic_cast 才安全.
如:
Car * p = new QQ_Car;
QQ_Car * qq_p = dynamic_cast <QQ_Car *> (p);