【问题标题】:C++ queues of pointers to object c2228 error指向对象 c2228 错误的指针的 C++ 队列
【发布时间】:2013-03-08 22:30:00
【问题描述】:

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

我的班级:

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 我得到了“onCPU”的错误IntelliSense: expression must have class type

在这一行:

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

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

【问题讨论】:

    标签: c++ pointers queue


    【解决方案1】:

    由于onCPU 包含指针,所以当您执行front() 时,您会从中得到一个指针。要通过指针访问对象的成员,请使用-&gt;

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

    由于您不确定拥有queue 指针是否是个好主意,请问自己:process 对象是否应该是 queue 的一部分,它拥有它们的唯一所有权?还是应该 queue 只是指在别处创建的对象?

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

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

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

    【讨论】:

    • 感谢您的快速回复。我不知道我做错了什么,因为我发誓我尝试了 -> 运算符!哈哈,谢谢你的帮助
    • 如果我错了请纠正我,但要删除它我只需 delete P1 ?
    • @slowsword 正确。 delete P1; delete P2;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 2014-04-12
    相关资源
    最近更新 更多