错误:从long int转换为非标量类型,将迭代器与null进行比较

时间:2009-01-22 23:06:16

标签: c++ iterator

您好希望有人能解释这个问题。这是代码:

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

2 个答案:

答案 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()