保持Const PCB的错误无法转换为* PCB

时间:2016-11-27 20:16:40

标签: c++ process priority-queue

我收到一条错误,指出const PCB无法转换为* PCB,并且我可以将对象声明为NULL的唯一方法是使用指针。任何人都可以帮我解决问题。我把//发生错误的地方我只是试图在CPU中为第一个" if语句存储最高优先级的过程控制块,当它为NULL或为空时"如果ready_queue.top高于cpu,则第二个将优先级队列的顶部与cpu进行比较并抢占它。尝试过使用bool isEmpty()和其他东西但似乎什么都没有用

struct PrCB
{
    int PrID;
    int PrSize;
    int prior;
    int sumMem= 0;
    bool operator < (const PrCB & a)
    {
        return prior < a.prior;
    }
    bool operator > (const PrCB & a)
    {
        return prior > a.prior;
    }
};

struct compare
{
    bool operator()(const PrCB &a,const PrCB &b)
    {
        return a.prior < b.prior;
    }
};

int main()
{
    int pid = 0;
    char inter;
    PrCB pcb;
    PrCB cpu;
    priority_queue<PrCB, vector<PrCB>,compare> ready_queue;
    while(true)
    {
        cin >> inter;
        if(inter == 'N')
        {
            pcb.PrID = pid;
            cout << "How much memory space?" << endl;
            cin >> pcb.PrSize;
            cout << "What is the Priority?" << endl;
            cin >> pcb.prior;
            ready_queue.push(pcb);
            pid++;
            //if(cpu == NULL)
            {
                cpu == ready_queue.top();
                ready_queue.pop();
            }
            //if(cpu < ready_queue.top())
            {
                ready_queue.push(cpu);
                //cpu = ready_queue.top();
                ready_queue.pop();
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您需要使用代码修复一些内容,然后这将更加明确:

  1. operator()超载更改PrCBkPrCB
  2. 在您的while循环中将While更改为while
  3. 您没有定义operator==,只要您在==之类的内容上使用cpu运算符,就会出现错误。
  4. 确保为不同的数据类型包含运算符重载;即指针与参考文献。
  5. 查看priority_queue.top()等函数的返回值,并将const_reference与指针进行比较。确保您正确使用这些。
  6. 这些事情需要纠正,以便您的代码编译。还有其他语法错误需要纠正。