我有两个结构(部分任务)。一个列表 - 活动,包含在另一个 - 流程中。然后,几个父进程结构包含在优先级队列中。
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推送回Process的activityQueue时。
Activity currentActivity = cpuQueue.top().activityQueue.back();
currentActivity.time--
cpuQueue.top().activityQueue.push_back(currentActivity);
答案 0 :(得分:5)
std::priority_queue<T>::top()
将 const引用返回到顶部项目:这样您就不能就地改变它并破坏排序约束。
如果您对活动列表是一个不会影响cpu队列中进程位置的实现细节感到高兴,那么您可以将Process::activityQueue
变为。< / p>
否则,您应该将进程拉出队列,修改它并重新添加。
答案 1 :(得分:0)
如果你想使用push_back,你需要使用非const向量。