2016-11-27 3 views
0

Я получаю сообщение об ошибке, которое говорит, что const PCB не может преобразовать в * PCB и единственный способ, которым я могу объявить объект NULL с указателем. Может ли кто-нибудь помочь мне разобраться с проблемой. Я помещаю // где происходит ошибка. Я просто пытаюсь сохранить блок управления процессом с наивысшим приоритетом в CPU для первого «if-оператора», когда он является NULL или пустым », а второй сравнивает верхнюю часть очереди приоритетов с cpu и preemptive, если ready_queue.top выше, чем процессор. Пытались с помощью BOOL IsEmpty() и другие вещи, но ничего, кажется, работаетУстранение ошибки Const PCB не может конвертироваться в * PCB

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(); 
      } 
     } 
    } 
} 

ответ

0

Вам необходимо исправить несколько вещей с вашим кодом и тогда это будет более ясно:

  1. В вашем изменении operator() перегрузки PrCBk - PrCB.
  2. В вашем изменении цикла While до while.
  3. У вас нет operator==, и это вызывает ошибки всякий раз, когда вы используете оператора == по таким вещам, как cpu.
  4. Обязательно включите перегрузку оператора для разных типов данных; то есть указатели против ссылок.
  5. Посмотрите на возвращаемые значения для таких функций, как priority_queue.top() и сравните const_reference с указателем. Убедитесь, что вы используете их правильно.

Эти вещи необходимо исправить, поэтому ваш код компилируется. Существуют и другие синтаксические ошибки, которые необходимо исправить.

+0

так, если бы я должен был сделать bool operator == (PrCB & a), если (a.priority == NULL) что-то вернуть? и я не понимаю, что вы подразумеваете под свойством priority_queue.top() или у вас означает ready_queue.top()? Спасибо за помощь ! – user58504

+0

'a.priority' имеет тип' int', что означает, что вам не нужно проверять 'NULL'. Я думаю, вы можете быть смущены тем, что является указателем, а что нет, 'int' не является указателем. 'ready_queue' имеет тип' priority_queue', так что да, вы можете прочитать его как 'ready_queue.top()'. – user2205930

+0

ahhh okay, поэтому, если мы сделаем оператор bool == (PrCB & a), что это значит, чтобы возвратить причину, я хочу использовать if (cpu == empty или NULL), переместить ready_queue.top() в CPU, что и есть проблема с: S – user58504

 Смежные вопросы

  • Нет связанных вопросов^_^