C ++ проблемы со структурой списка push_back - PullRequest
2 голосов
/ 08 февраля 2012

У меня есть две структуры (часть задания). Список одного - Activity, содержащийся в другом - Process. Затем несколько из родительской структуры Process содержатся в очереди с приоритетами.

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]

... когда я пытаюсь отодвинуть Activity к процессу ActivityQueue.

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

Ответы [ 2 ]

5 голосов
/ 08 февраля 2012

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

Если вы довольны тем, что список действий - это деталь реализации, которая не повлияет на положение процесса в очереди процессора, вы можете просто сделать Process::activityQueue mutable .

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

0 голосов
/ 08 февраля 2012

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

...