2016中国十大最丑建筑:关于C++强制转型的问题!!急!
来源:百度文库 编辑:杭州交通信息网 时间:2024/06/04 06:36:22
#include <iostream>
using namespace std;
class Base
{
public:
virtual void func1(){};
};
class Derived:public Base
{
};
int main()
{
Base *bp,b_ob;
Derived *dp,d_ob;
bp=&d_ob;
dp=dynamic_cast<Derived *>(bp);
if(dp)
{
cout<<"Cast Ok"<<endl;
}
return 0;
}
此程序调试有问题。为什么向下强制转型会出现问题呢?这是一本国外C++教程《C++:A Beginner's Guide》中的438页上的一个例子,但是错的!
using namespace std;
class Base
{
public:
virtual void func1(){};
};
class Derived:public Base
{
};
int main()
{
Base *bp,b_ob;
Derived *dp,d_ob;
bp=&d_ob;
dp=dynamic_cast<Derived *>(bp);
if(dp)
{
cout<<"Cast Ok"<<endl;
}
return 0;
}
此程序调试有问题。为什么向下强制转型会出现问题呢?这是一本国外C++教程《C++:A Beginner's Guide》中的438页上的一个例子,但是错的!
程序本身是没有任何错误的,dynamic_cast用的非常合理.
不知道LZ是否是使用VC来做平台,如果是的,那么请打开Project->settings->c/c++->category->c++ language,将Enable Run-Time Type Infomation(RTTI)选中,或者直接使用/GR编译选项.
因为VC默认不启动RTTI,即“运行时期类型识别”,如果在你的程序用到了RTTI,比如typeid,你必须明确告诉编译器启动RTTI,这样VC才能正确编译!
希望对LZ有帮助呵呵.RTTI,真是让人既爱又恨的名字~~
头文件输入错了吧!