求教:使用dynamic_cast,dev-c++可以通过,vc60, vc.net报非法错误??

letok 2003-08-26 10:16:28
一个简单程序,在vc60和vc.net里编译通过,运行报非法错误。在dev-c++中
没问题


// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "string"
#include "vector"
#include "iostream"
#include "fstream"

using namespace std;

class ZooAnimal //基类
{
public:
virtual void fn(){;}; //虚函数
protected:
private:

};



class Bear: public ZooAnimal //派生类
{
public:
void fn(){cout<<"abc"<<endl;}; //隐藏基类虚函数
protected:
private:
};



int _tmain(int argc, _TCHAR* argv[])
{
ZooAnimal *pZoo = new Bear; //基类指针指向派生类
Bear * pBear = dynamic_cast< Bear* >( pZoo ); //转换


return 0;
}


...全文
41 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
TopCat 2003-08-26
  • 打赏
  • 举报
回复
RTTI需要额外的类型信息记录,所以会降低代码的效率,C++也并不推荐使用RTTI。而MFC使用的是自己的RTTI机制,所以一般可以不用打开这个选项。
letok 2003-08-26
  • 打赏
  • 举报
回复
找到了,c/c++ --> language --> Enable Run-Time Type Info


但为什么微软默认要关闭这个呢???是不是它提供了别的方式可以查看动态信息??
xiaoyunet 2003-08-26
  • 打赏
  • 举报
回复
ms的编译器默认是没有打开rtti选项的,你在编译选项中可以找到打开的开关。
vc6我手边没有,vc7中打开项目设置,在配置属性\c/c++\语言\启动运行时类型信息,将该选项置为true就可以了。
letok 2003-08-26
  • 打赏
  • 举报
回复
找不到那个选项呀,我是新手。


再问:ms怎样实现RTTI??
熊主任 2003-08-26
  • 打赏
  • 举报
回复
在选项中打开RTTI就可以了。因为MS对于RTTI有自己的一套实现方式。

64,636

社区成员

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

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