代碼有問題,求大神解釋一下
#include <iostream>
#include <stdlib.h>
#include<typeinfo>
#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;
}
這是我的代碼,一運行就出現這個,當把以下代碼注釋掉
? /*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();
? ? }*/
編譯運行能過,該怎么解決
2018-06-08
已解決,是沒有開啟RTTI