c++指向对象的指针队列c2228错误

C++ queues of pointers to object c2228 error

本文关键字:队列 c2228 错误 指针 对象 c++      更新时间:2023-10-16

我试图有一个对象队列并修改它们供以后使用。由于创建队列只是在队列中修改它们并删除它们后生成一个副本,因此它们会消失。所以我需要一个指向我的对象的指针队列来绕过这个(或者我理解的)。

我的类:

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队列顶部的值

由于onCPU包含指针,当您执行front()时,您将从中获得指针。通过指针访问对象的成员,使用->:

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

既然你不确定是否有一个指针的queue是一个好主意,问自己:process对象应该的一部分 queue拥有它们的唯一所有权?或者queue应该简单地引用在其他地方创建的对象?

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

如果你想动态地分配它们,考虑使用智能指针(如std::unique_ptrstd::shared_ptr)。

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