1

マップをトラバースして値を見つけるイテレータを宣言する際に問題がありました。「'fibiter' の前にイニシャライザが必要です」というエラーが表示されます。

map <int, int> fibHash;

int memoized_fib(int n)
{
    map <int, int> iterator fibiter = fibHash.find(n); //ERROR HERE

    if(fibiter != fibHash.end())
        return  *fibiter;

    int fib_val;
    if(n  <= 1)
        fib_val = 1;
    else
        fib_val = memoized_fib(n - 1) + memoized_fib(n - 2);

    fibHash[n] = fib_val;
    return fib_val;
}

int main()
[..]
4

2 に答える 2

4

スコープ解決演算子を使用するのを忘れました::。コンパイラは、あなたがmap<int, int>名前付きを宣言したiteratorと見なすため、が見つかったときに非常に混乱しますfibiter

map<int, int>::iterator fibiter

あなたが欲しいものです

于 2012-10-05T22:41:59.667 に答える
1

map <int, int> iteratormap <int, int>::iterator

iteratorは、クラス「map」内で定義されたtypedefです。<bits/stl_map.h>139行目でGCC4.6.3に同梱されている標準ライブラリの実装を調べると、次のようになります。

typedef typename _Rep_type::iterator               iterator;

typedefはクラスの定義に属しているため、コンパイラがそれを見つける場所を認識できるように、「:」を追加する必要があります。

于 2012-10-05T22:41:38.887 に答える