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