我使用的是C++,而且我遇到了以下問題,即每次調用方法「getItem()」時都會返回0,儘管這不是寫入地圖的整數,地圖也不是空的。使用「typename ...」語句作爲類屬性有什麼問題嗎?通過Iterator從模板類瀏覽映射
template <class t>
class P {
public:
P();
int getItem();
private:
std::map<int, P<t>* > m;
typename std::map<int, P<t>* >::iterator it;
bool visited;
};
template <class t>
P<t>::P() {
visited=false;
}
template <class t>
int P<t>::getItem()
{
if(!visited)
it=m.begin();
int i=it->first;
it++;
return i;
}
方法「getItem()」僅在沒有更多地圖更改後調用。所以不應該有迭代器無效的原因。我通過調用m [i] = p將項添加到地圖中。
感謝所有幫助;)
這就是全部? 'visited'初始化爲'false'?你如何將元素添加到'map'?你確定'迭代器'仍然有效嗎? –
在P'visited'的構造函數中設置爲'false'。我通過調用'm [i] = p'來爲地圖添加元素,以獲得從不爲'0'和有效類對象'p'的有效整數。在將所有元素添加到地圖後,我調用該函數,以便在調用方法時不更改它。是否有任何其他原因,爲什麼迭代器不能再有效? – Heusi
你好,歡迎來到SO!在這樣的奧祕中,我們經常發現錯誤出現在您*不*發佈的代碼中,而不是您所做的代碼中。 (畢竟,如果你知道錯誤在哪裏,你不會在這裏,是嗎?)請將你的原始程序減少到最小的** complete **程序,以顯示錯誤(通常20行左右)。然後將該**整個程序複製粘貼到問題中。請參閱http://sscce.org獲取更多信息。 –