您好希望有人能解释这个问题。这是代码:
class Memory{
public:
PacketPtr pkt;
MemoryPort* port;
MemCtrlQueueEntry(){};
};
我做完之后:
std::list<Memory*>::iterator lastIter = NULL;
我收到以下错误:
error: conversion from long int to non-scalar type std::_List_iterator<DRAMMemory::MemCtrlQueueEntry*> requested
将迭代器初始化为NULL的问题在哪里?
答案 0 :(得分:3)
迭代器不是指针。如果要将它们初始化为非值,请使用list :: end()。使用指针实现vector<T>::iterator
的事实是一个您不能依赖的实现细节。
如果要为迭代器引用的位置的值赋值NULL,则必须先取消引用它:
std::list<Memory *> aList;
aList.push_back(new Memory())
std::list<Memory*>::iterator listIter = aList.begin();
delete *listIter;
*listIter = NULL;
使用list :: end()初始化:
std::list<Memory *> aList;
std::list<Memory*>::iterator listIter = aList.end();
答案 1 :(得分:0)
Iterator是一个类引用,而不是指针。
初始化它们没有用,除了std::list::begin()