[英]variable was not declared in this scope
我有以下代码:
typename List<Pair>::Iterator Iterator;
int changeTableSize(int newSize, int originalSize){
List<Pair>* temp = new List<Pair>[newSize];
for (int i = 0; i < originalSize; i++){
for (Iterator j = elements[i].begin(); j != elements[i].end(); j++){
Pair p = *j;
temp[p.key % newSize].insert(p);
}
}
delete elements;
elements = temp;
return newSize;
}
编译器说j没有在此范围内声明。 是什么原因造成的?
(请注意,列表和配对是由我实现的)
该声明
typename List<Pair>::Iterator Iterator;
将Iterator
声明为变量。
它不再是一种类型。
您是要写typedef
而不是typename
吗?
这样可以解决眼前的问题,但不能解决此类将来的问题。
为了通常避免此类问题,请对迭代器使用C ++ 11 auto
作为循环控制变量。
与其明确使用new
和delete
来实现动态大小的数组, std::vector
考虑使用std::vector
。 更加方便,安全等。工作更少,更愉快!
“迭代器”应该是c ++ iterator
吗? 因为如果是这样,那就是问题所在。 对j使用关键字自动,它应该这样做。
它给您带来错误的原因是因为没有完全/正确地声明/初始化了迭代器。
请记住,迭代器是模板类,因此您应该立即知道它需要至少一个模板参数,即forward_list<int>::iterator
。
如果未完全定义Iterator
则可能会出现此错误。 通常,您会在此之前看到有关类型未定义的错误。
或者,如果您使用的是古老的MS编译器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.