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

Iterator はクラス参照であり、ポインターではありません。

次の場合を除いて、それらを初期化しても意味がありませんstd::list::begin()

于 2009-01-22T23:11:58.433 に答える