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

どの時点でも に設定visitedしていないため、常にの最初の項目の整数を返します。これはおそらくです。あなたはおそらく次のようなことを意味していました:truemap0

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

「visited」ブール値を設定しないため、「getItem」を作成するループを実行すると、常に反復子「it」が再初期化されます。

于 2012-06-26T18:23:45.973 に答える