c++ 基类指针 入队列queue错误

问题遇到的现象和发生背景

c++ 基类指针 入队列错误

问题相关代码,请勿粘贴截图

以下是出错的地方

void Simulater::coustomerEnter(int ArriveTime) {
    srand(time(0));
    User* u;
    NormalUser a(ArriveTime);
    switch (rand() % 3) {
    case 0: {
        NormalUser nomaluser(ArriveTime);
        NormalUserQueue.push(nomaluser);
        break;
    }//普通用户
    case 1: {
        VIPUser vipuser(ArriveTime);
        VIPUserQueue.push(vipuser);
        break;
    }
    case 2: {
        u = new OfficialUser(ArriveTime);
        OfficialUserQueue.push(*u);
        break;
    }
    }
}

以下是类的实现


class User {
public:
    int id;
    int isWait;
    int ArriveTime;
private:
    int ServeTime=4000;//ms
    wchar_t type;
public:
    User(int ArriveTime_) :ArriveTime(ArriveTime_) {};
    virtual void getServed() = 0;
};

class NormalUser :public User {
public:
    NormalUser(int ArriveTime_) :User(ArriveTime_) {};
    void getServed() {

    };
};

class VIPUser :public User {
public:
    VIPUser(int ArriveTime_) :User(ArriveTime_) {};
    void getServed() {

    };
};

class OfficialUser :public User {
public:
    OfficialUser(int ArriveTime_) :User(ArriveTime_) {};
    void getServed() {

    };
};
运行结果及报错内容

case 2中push(*u),无法将基类指针指向的子类入队列

我的解答思路和尝试过的方法
我想要达到的结果

你那也不是指针啊,不用

将u转化成OfficialUser*,

OfficialUser*of= dynamic_cast<OfficialUser*>(u);