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>named 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 行中查看GCC 4.6.3 附带的标准库的实现,您有:

typedef typename _Rep_type::iterator               iterator;

由于 typedef 属于类的定义,你应该添加“:”以便编译器知道在哪里找到它。

于 2012-10-05T22:41:38.887 回答