2012-02-08 2 views
2

У меня есть две структуры (часть задания). Список один - действие, содержащееся в другом - процесс. Затем несколько родительских структур процесса содержатся в очереди приоритетов.Проблемы с C++ со списком struct push_back

struct Activity { 
public: 
    int time; 
    string type; 
    Activity(int newTime, string newType): 
    time(newTime),type(newType){} 
}; 

struct Process { 
public: 
    string PID; 
    int arrivalTime; 
    int priority; 
    list<Activity> activityQueue; 
    Process(string newPID, int newTime, int newPriority, list<Activity> 
     newActivityQueue): 
    PID(newPID),arrivalTime(newTime), priority(newPriority), 
     activityQueue(newActivityQueue){} 

};

Я получаю следующее сообщение об ошибке ...

main.cpp:206:61: error: passing ‘const std::list<Activity>’ as ‘this’ argument of 
‘void std::list<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = Activity, 
_Alloc = std::allocator<Activity>, std::list<_Tp, _Alloc>::value_type = 
Activity]’ discards qualifiers [-fpermissive] 

... когда я пытаюсь push_back активности activityQueue процесса, в.

Activity currentActivity = cpuQueue.top().activityQueue.back(); 
currentActivity.time-- 
cpuQueue.top().activityQueue.push_back(currentActivity); 
+0

Нам было бы намного легче, если бы вы сделали минимальный пример проблемы. – Listing

+3

Я предполагаю, что 'cpuQueue.top()' возвращает ссылку на const. –

+0

@MichaelBurr Это почти наверняка правильный ответ. – dasblinkenlight

ответ

5

std::priority_queue<T>::top() возвращает ссылка на const на верхний элемент: это значит, что вы не можете мутировать его на месте и нарушить ограничения порядка.

Если вы счастливы, что перечень видов деятельности является деталью реализации, которая не будет влиять на позицию процесса в очереди процессора, вы можете просто сделать Process::activityQueueизменяемые.

В противном случае вы должны вытащить процесс из очереди, изменить его и повторно добавить.

0

В нем говорится, что вам нужно использовать неконстантный вектор, если вы хотите использовать push_back no it.

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