c++指向对象的指针队列c2228错误
C++ queues of pointers to object c2228 error
我试图有一个对象队列并修改它们供以后使用。由于创建队列只是在队列中修改它们并删除它们后生成一个副本,因此它们会消失。所以我需要一个指向我的对象的指针队列来绕过这个(或者我理解的)。
我的类:
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_ptr
或std::shared_ptr
)。
如果您坚持使用原始指针来动态分配对象,请不要忘记对它们进行delete
。
相关文章:
- boost::进程间消息队列引发错误
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- Android NDK传感器向事件队列报告奇怪的间隔
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 按对象的特定方法按升序排列的C++优先级队列
- 使用2个键的cpp-stl::优先级队列排序不正确
- 我是否需要在下一次转移时将所有权*转移回转移队列
- 在一个读写器队列中,我可以用volatile替换原子吗
- 为什么我的多线程作业队列崩溃
- 尝试将lambda函数放在队列中时出现一般分配器错误(可能是与unique_ptr有关的错误)
- 使用"Task"函数指针队列定义作业管理器
- 在c++队列中使用pop和visit实现线程安全
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 打印优先级队列
- 共享队列的线程安全
- 带自定义比较器的最小优先级队列
- 在 Vulkan Qt 中获取队列系列
- 堆栈和队列是否像C++中的数组一样传递?
- 在C++中创建队列 - 什么是 malloc 错误?
- c++指向对象的指针队列c2228错误