一道关于dynamic_cast题目不理解

freenvshen 2014-08-14 06:26:18
程序如下:
#include<iostream>
using namespace std;

class A{
public:
A(){}
};

class B:public A{
public:
B(){}
};

void main()
{
A *pb=new B();
B b;

A *pa=dynamic_cast<A *>(pb);
}

在VC6.0中程序编译报错:error C2683: dynamic_cast : 'A' is not a polymorphic type
但是在VS2005中却可以正确编译并执行。
还有一点,如果想使用动态运行类别检查或者类型转换的话,在VC6.0中应该在设置里,把Enable Run Time Information选项选上,想问大家一下,如果在VS中,这个应该在哪里设置,没找到怎么设置,还是说,这个在VS中已经是自动的?
希望懂的大神们不吝赐教,感谢。。。。
...全文
178 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
反转灵魂 2014-08-21
  • 打赏
  • 举报
回复
引用 5 楼 u014199750 的回复:
[quote=引用 4 楼 reversesoul 的回复:] 首先想一下,为什么要使用dynamic_cast转换,转换后你想调用的是哪一部分的函数,这个函数是虚函数还是什么其他的函数。然后你就懂了。 或者有捷径:《C++ Primer》第四版 P957
这个页码是不是写错了,第四版好像额米有957页吧[/quote] 额,有一节专门讲dynamic_cast的你看看
freenvshen 2014-08-21
  • 打赏
  • 举报
回复
引用 4 楼 reversesoul 的回复:
首先想一下,为什么要使用dynamic_cast转换,转换后你想调用的是哪一部分的函数,这个函数是虚函数还是什么其他的函数。然后你就懂了。 或者有捷径:《C++ Primer》第四版 P957
这个页码是不是写错了,第四版好像额米有957页吧
反转灵魂 2014-08-15
  • 打赏
  • 举报
回复
首先想一下,为什么要使用dynamic_cast转换,转换后你想调用的是哪一部分的函数,这个函数是虚函数还是什么其他的函数。然后你就懂了。 或者有捷径:《C++ Primer》第四版 P957
menzi11 2014-08-14
  • 打赏
  • 举报
回复
能够动态类型识别的类必须是 runtime polymorphic类,一个虚函数都没有的类不是runtime polymorphic类,如果你是父类转子类指针,那dynamic_cast必然报错,但你的代码比较特殊,是.....父类转父类.....在这种情况下dynamic_cast等于static_cast,或者说这段代码里等于没起作用,所以不报错.VC6可能是只要发现非polymorphic的进行dynamic_cast就直接报错,不检查dynamic_cast是子类转父类还是父类转父类....... 然后第二个问题,VS里也有一模一样的选项,Enable Run Time Information,默认就是打开的.
passion_wu128 2014-08-14
  • 打赏
  • 举报
回复
dynamic_cast只能用在基类有虚函数情况,我用vs2008都会报错,你的vs2005是不是关了Enable Run Time Information? 2008设置方法如下,05应该一样。 依次选择【工程属性】、【配置属性】、【C/C++】、【语言】。将【启用运行时类型信息】改为”否“。 dynamic_cast原理参考这篇文章: http://blog.csdn.net/passion_wu128/article/details/38511957
神奕 2014-08-14
  • 打赏
  • 举报
回复
pb本身不就是A *类型的么,为什么还要dynamic_cast。。。当然这样也不会错

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧