繁体   English   中英

未在此范围内声明变量

[英]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作为循环控制变量。


其他的建议。

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

“迭代器”应该是c ++ iterator吗? 因为如果是这样,那就是问题所在。 对j使用关键字自动,它应该这样做。

它给您带来错误的原因是因为没有完全/正确地声明/初始化了迭代器。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM