0

我正在使用 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 将项目添加到地图中。

谢谢你的帮助 ;)

4

2 回答 2

0

您没有设置“已访问”布尔值,因此如果您运行一个生成“getItem”的循环,您总是重新初始化迭代器“it”。

于 2012-06-26T18:23:45.973 回答
0

由于您在任何时候都没有设置visited为,因此您总是返回其中第一项的整数,大概是. 你的意思可能是这样的:truemap0

if(!visited)
{
    visited = true;
    it=m.begin();
}
于 2012-06-26T20:03:03.193 回答