我正在使用c ++,我遇到的问题是,以下代码中方法“getItem()”的每次调用都返回0,尽管这不是地图中写入的整数,并且地图也不是空的。使用“typename ...”语句作为类属性有什么问题吗?
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。
将项目添加到地图中感谢您的帮助;)
答案 0 :(得分:0)
你没有设置“visited”布尔值,所以如果你运行一个生成“getItem”的循环,你总是重新初始化迭代器“it”。
答案 1 :(得分:0)
由于您未在任何时候将visited
设置为true
,因此您总是返回map
中第一项的整数0
。你可能意味着:
if(!visited)
{
visited = true;
it=m.begin();
}