程序运行不了,显示头文件找不到,帮我看一下除了这里哪里还有问题


#ifndef PCB_H
#define PCB_H
#include<vector>
class pcb {
    friend void sort(std::vector<pcb>&);
    friend void RR(std::vector<pcb>&, const float&);
public:
    pcb() = default;
    pcb(char a, float b, float c) :name(a), arrival_time(b), service_time(c), remaining_time(c) {}
private:
    char name;
    float arrival_time;      //到达时间
    float service_time;      //服务时间
    float remaining_time;    //剩余服务时间
    float finish_time;       //结束时间
    float t1;                //周转时间
    float t2;                //带权周转时间
public:
    void display() const;    //显示进程信息
    char read_name() const;  //读取名称
    bool crt(float rr);      //计算剩余时间
    void cft(float time);    //计算结束时间
    float ct1();             //计算周转时间
    float ct2();             //计算带权周转时间
};
#endif

#include"pcb.h"
#include<iostream>

using namespace std;
//显示进程信息
void pcb::display() const {
    cout << "名称:" << name << "\t"
        << "到达时间:" << arrival_time << "\t"
        << "服务时间:" << service_time << endl;
}

//计算剩余时间,时间不足一个时间片返回false,否则返回true
bool pcb::crt(float rr) {   
    if (remaining_time <= rr)
        return false;
    else {
        remaining_time -= rr;
        return true;
    }
}

//计算结束时间
void pcb::cft(float time) {
    finish_time = time;
}

//计算周转时间
float pcb::ct1() {
    return finish_time - arrival_time;
}

//计算带权周转时间
float pcb::ct2() {
    return (finish_time - arrival_time) / service_time;
}

//读取进程名
char pcb::read_name() const {
    return name;
}

using namespace std;

//按到达时间排序
void sort(vector<pcb>& pcbs) {
    int index;
    int n = pcbs.size();
    for (int i = 0; i < n; i++) {
        index = i;
        for (int j = i + 1; j < n; j++) {
            if (pcbs[j].arrival_time < pcbs[i].arrival_time)
                index = j;
        }
        if (index != i){
            pcb temp;
            temp = pcbs[i];
            pcbs[i] = pcbs[index];
            pcbs[index] = temp;
        }
    }
}

void RR(vector<pcb>& pcbs, const float& rr) {
    vector<char> order;  //记录执行顺序
    deque<pcb> queue;  //双端队列
    unsigned i = 1;
    int n = pcbs.size();

    //按到达时间排序
    sort(pcbs);

    //第一个到达的进程进入队列
    queue.push_back(pcbs[0]);
    float time = pcbs[0].arrival_time;

    while (n!=0) {

        //计算当前时间
        if (!queue.empty()) {
            if (queue[0].remaining_time < rr)
                time += queue[0].remaining_time;
            else
                time += rr;
        }
        else {
            time = pcbs[i].arrival_time;
            queue.push_back(pcbs[i]);
            i++;
            if (queue[0].remaining_time < rr)
                time += queue[0].remaining_time;
            else
                time += rr;
        }

            
        //在进程结束之前到达的新进程进入队列
        while (i < pcbs.size() && pcbs[i].arrival_time <= time) {
            queue.push_back(pcbs[i]);
            i++;
        }
        
        order.push_back(queue[0].name);

        //未执行完的进程放入队尾,否则从队列中删除
        if (queue[0].crt(rr)) { 
            pcb t = queue[0];
            queue.pop_front();
            queue.push_back(t);
        }
        else {
            for (unsigned j = 0; j < pcbs.size(); j++) {
                if (pcbs[j].name == queue[0].name) {
                    pcbs[j].cft(time);
                }
            }
            queue.pop_front();
            n--;
        }
    }
    //打印执行顺序
    cout << "执行顺序:";
    for (auto i : order)
        cout << i << ' '<<endl; 
}


#include<iostream>
#include<vector>
#include<deque>
#include<random>
#include<ctime>
using namespace std;
int main() {
    int n;
    float rr;

    //输入进程信息并显示
    cout << "输入进程数目:";
    cin >> n;
    vector<pcb> pcbs(n);
    cout << "\n输入进程名、到达时间" << endl;
    char name; float at; float st;

    uniform_int_distribution<unsigned> u(1, 5);  //生成1-5间(包含)均匀分布的随机数
    default_random_engine e(time(0));
    for (int i = 0; i < n; i++) {
        cin >> name >> at ;
        st = float(u(e));
        pcbs[i] = pcb(name, at, st);
    }
    for (int i = 0; i < n; i++) {
        pcbs[i].display();
    }

    //输入时间片大小,执行RR
    cout << "\n输入时间片大小:";
    cin >> rr;
    cout << "\n";
    RR(pcbs, rr);

    //计算(平均)周转时间、(平均)带权周转时间
    float sum1 = 0.0, sum2 = 0.0;
    for (int i = 0; i < n; i++) {
        cout << "编号:" << pcbs[i].read_name() << "\t"
            << "周转时间:" << pcbs[i].ct1() << "\t"
            << "带权周转时间:" << pcbs[i].ct2() << endl;
        sum1 += pcbs[i].ct1();
        sum2 += pcbs[i].ct2();
    }
    cout << "平均周转时间:" << sum1 / float(n) << endl;
    cout << "平均带权周转时间:" << sum2 / float(n) << endl;

    return 0;
}

操作系统时间片轮转法的实验