我在声明迭代器遍历地图并查找值时遇到了问题。我在'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()
[..]
答案 0 :(得分:4)
您忘记使用范围解析运算符::
。编译器认为您声明了一个名为map<int, int>
的{{1}},因此在找到iterator
时会感到困惑。
fibiter
是你想要的
答案 1 :(得分:1)
map <int, int> iterator
→map <int, int>::iterator
iterator是在类&#34; map&#34;中定义的typedef。
您可以查看<bits/stl_map.h>
第139行中GCC 4.6.3附带的标准库的实现,您有:
typedef typename _Rep_type::iterator iterator;
由于typedef属于类的定义,你应该添加&#34;:&#34;这样编译器就知道在哪里找到它。