0

我正在尝试创建一个对象队列并稍后修改它们。由于创建队列只是在修改队列中的它们并删除它们后创建一个副本,因此它们消失了。所以我需要一个指向我的对象的指针队列来解决这个问题(或者我理解)。

我的课:

class process { 
    int waittime;
    queue<int> cpuburst, iotime;
   }

然后我像这样创建我的队列:

process *P1;
process *P2;

P1 = new process(//info to fill my P1 with data);
P2 = new process(//info to fill my P2 with data);

queue<process *> readyque;
queue<process *> onCPU;

readyque.push(P1);
readyque.push(P2);

编译得很好,但是当我尝试使用 .front() 或 .push() 对队列做任何事情时,我得到了错误C2228: left of '.cpuburst' must have class/struct/union ,并且我得到IntelliSense: expression must have class type了“onCPU”的错误

在这条线上:

x = onCPU.front().cpuburst.front() + y;

我只是想让 x 等于我班级队列顶部的值,这也是我的 onCPU 队列的顶部

4

1 回答 1

3

由于onCPU包含指针,当你这样做时,front()你会得到一个指针。要通过指针访问对象的成员,请使用->

x = onCPU.front()->cpuburst.front() + y;

由于您不确定拥有 a queueof 指针是否是一个好主意,请问问自己:process对象是否应该是拥有它们唯一所有权的对象的一部分?queue还是应该queue简单地引用在其他地方创建的对象?

如果您可以避免动态分配对象,那总是一件好事。也许 astd::queue<std::reference_wrapper<process>>会有用。

如果您想继续动态分配它们,请考虑使用智能指针(例如std::unique_ptror std::shared_ptr)。

如果您坚持使用指向动态分配对象的原始指针,请不要忘记delete它们。

于 2013-03-08T22:31:55.047 回答