2009-01-22 75 views
2

你好,我希望有人能解釋這個問題。這是代碼:錯誤:從長int轉換爲非標量類型,將迭代器與null進行比較

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?

回答

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; 

與初始化列表::結束():

std::list<Memory *> aList; 
std::list<Memory*>::iterator listIter = aList.end(); 
+0

這是很奇怪的,我是,該代碼在另一臺機器是工作,是事,是因爲您在一開始就知道求佛「的事實向量 ::迭代器有時用指針「? – Eduardo 2009-01-22 23:26:23

+0

這完全有可能。 – Eclipse 2009-01-22 23:35:31

0

迭代器是類引用,而不是指針。

有一個在初始化他們除了沒有使用與std::list::begin()

相關問題