结构列表push_back的C++问题

C++ problems with struct list push_back

本文关键字:C++ 问题 back 列表 push 结构      更新时间:2023-10-16

我有两个structs(赋值的一部分)。一个--活动的列表,包含在另一个--进程中。然后,几个父进程结构包含在一个优先级队列中。

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]

当我尝试将"活动"推送回流程的activityQueue时。

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

std::priority_queue<T>::top()向顶部项返回常量引用:这样您就不能在适当的位置对其进行变异并破坏排序约束。

如果您很高兴活动列表是一个不会影响进程在cpu队列中的位置的实现细节,那么您可以使Process::activityQueue可变

否则,您应该将进程从队列中拉出,对其进行修改,然后重新添加。

它说如果你想使用push_back no-It,你需要使用一个非常量向量。