ошибка: преобразование long int в нескалярный тип, сравнение итератора с нулевым - PullRequest
2 голосов
/ 23 января 2009

Здравствуйте, я надеюсь, что кто-то может объяснить эту проблему. Это код:

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 ]

3 голосов
/ 23 января 2009

Итераторы не являются указателями. Если вы хотите инициализировать их ненулевым значением, используйте 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();
0 голосов
/ 23 января 2009

Итератор - это ссылка на класс, а не указатель.

Нет смысла их инициализировать, кроме как с std::list::begin()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...