变量未在此范围内声明
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
。更方便,更安全等。更少的工作,更愉快!
"Iterator" 它应该是一个 C++ iterator
吗?因为如果是,那么这就是问题所在。对 j 使用关键字 auto,它应该这样做。
它给你错误的原因是迭代器没有完全/正确声明/初始化。
请记住,迭代器是模板类,因此您应该立即知道它至少需要一个模板参数,即 forward_list<int>::iterator
.
如果未完全定义Iterator
则可能会收到此错误。 通常,在此之前,您会看到有关未定义的类型的错误。
或者,如果您使用的是古老的MS编译器。
相关文章:
- 错误:未在此范围内声明'reverse'
- 错误:"imread"未在此范围内声明
- 未在此范围内声明错误 'xy'
- Socklen_t未在此范围内声明
- 错误:'[' 之前预期的非限定 id 和错误:'users'未在此范围内声明
- "Main"已在当前范围内声明
- c++ 变量在宏的扩展中没有在这个范围内声明
- C++ 在编译过程中 strtok 函数 Eclipse 说没有在范围内声明?
- 'num1'未在此范围内声明
- 如何找到在本地范围内声明的变量的地址?
- NT状态未在此范围内声明
- 变量未在此范围内声明 数组线性搜索
- 包含文件中的 Typdef "未在此范围内声明"
- 'ClassName'和'ClassInstance'未在此范围内声明
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- 代码作为 C 文件工作,但不作为C++文件,错误:'__builtin_types_compatible_p'未在此范围内声明
- 如何修复错误:"vreinterpretq_u32_f64"未在此范围内声明 - 在Android上使用Eigen构建
- 如何修复C++中的"arrStud未在此范围内声明"错误
- 错误:"SHGetKnownFolderPath"未在此范围内声明
- 错误:'Sprite'未在此范围内声明