变量未在此范围内声明

variable was not declared in this scope

本文关键字:范围内 声明 变量      更新时间:2023-10-16

我有以下代码:

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用作循环控制变量。


其他评论。

与其显式使用 newdelete 来实现动态大小的数组,不如考虑只使用 std::vector 。更方便,更安全等。更少的工作,更愉快!

"Iterator" 它应该是一个 C++ iterator吗?因为如果是,那么这就是问题所在。对 j 使用关键字 auto,它应该这样做。

它给你错误的原因是迭代器没有完全/正确声明/初始化。

请记住,迭代器是模板类,因此您应该立即知道它至少需要一个模板参数,即 forward_list<int>::iterator .

如果未完全定义Iterator则可能会收到此错误。 通常,在此之前,您会看到有关未定义的类型的错误。

或者,如果您使用的是古老的MS编译器。