为了账号安全,请及时绑定邮箱和手机立即绑定

很奇怪,运行失败却代码成功

#include <iostream>

#include <stdlib.h>

#include <string>

using namespace std;


/**

 * 定义移动类:Movable

 * 纯虚函数:move

 */

class Movable

{

public:

    virtual void move() = 0;

};


/**

 * 定义公交车类:Bus

 * 公有继承移动类

 * 特有方法carry

 */

class Bus : public Movable

{

public:

    virtual void move()

    {

        cout << "Bus -- move" << endl;

    }

    

    void carry()

    {

        cout << "Bus -- carry" << endl;

    }

};


/**

 * 定义坦克类:Tank

 * 公有继承移动类

 * 特有方法fire

 */

class Tank : public Movable

{

public:

    virtual void move()

    {

        cout << "Tank -- move" << endl;

    }


    void fire()

    {

        cout << "Tank -- fire" << endl;

    }

};


/**

 * 定义函数doSomething含参数

 * 使用dynamic_cast转换类型

 */

void doSomething(Movable *obj)

{

    obj->move();


    if(typeid(*obj) == typeid(Bus))  

    {

        Bus *bus = dynamic_cast<Bus *>(obj);

        bus->carry();

    }


    if(typeid(*obj) == typeid(Tank))

    {

        Tank *tank = dynamic_cast<Tank *>(obj);

        tank->fire();

    }

}


int main(void)

{

    Bus b;

    Tank t;

    doSomething(&b);

    doSomething(&t);

    return 0;

}


正在回答

6 回答

刚看了下我的vs里面外部依赖库自带typeinfo类

https://img1.sycdn.imooc.com//5d5a6f5b000126ea04500776.png

1 回复 有任何疑惑可以回复我~

我再visual studio中运行不用引用任何东西都可以,可能是编辑器运行时自动调用了什么类,而慕课网里面的网页编辑器必须引用type_info类或者type_index类才可以运行成功。

1 回复 有任何疑惑可以回复我~

知道了,要加上头文件 #include<typeinfo>

6 回复 有任何疑惑可以回复我~
#1

冰拟绕指柔

是的,还真是这样。
2019-06-06 回复 有任何疑惑可以回复我~

怎么解决的


0 回复 有任何疑惑可以回复我~
#1

慕粉1469495939

就是没加头文件 typeinfo
2019-05-02 回复 有任何疑惑可以回复我~

已解决问题

0 回复 有任何疑惑可以回复我~

显示的是

index.cpp: In function 'void doSomething(Movable*)':
index.cpp:62:16: error: must #include  before using typeid
     if(typeid(*obj) == typeid(Bus))
                ^~~
index.cpp:62:34: error: must #include  before using typeid
     if(typeid(*obj) == typeid(Bus))
                                  ^
index.cpp:68:16: error: must #include  before using typeid
     if(typeid(*obj) == typeid(Tank))
                ^~~
index.cpp:68:35: error: must #include  before using typeid
     if(typeid(*obj) == typeid(Tank))


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之多态篇
  • 参与学习       66223    人
  • 解答问题       334    个

本教程将带领大家体会面向对象三大特性中的多态特性

进入课程

很奇怪,运行失败却代码成功

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号