2

您好,我希望有人可以解释这个问题。这是代码:

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 的问题在哪里?

4

2 回答 2

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();
于 2009-01-22T23:10:02.120 回答
0

迭代器是类引用,而不是指针。

初始化它们没有任何用处,除非与std::list::begin()

于 2009-01-22T23:11:58.433 回答