变量未在此范围内声明

时间:2014-01-04 19:14:12

标签: c++ iterator

我有以下代码:

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未在此范围内声明。是什么导致这种情况?

(请注意,List和Pair由我实现)

3 个答案:

答案 0 :(得分:2)

问题。

声明

typename List<Pair>::Iterator Iterator;

Iterator声明为变量。

它不再是一种类型。

<小时/>

修复

您的意思是写typedef,而不是typename

这将解决眼前的问题,但不会解决此类问题。

为了避免此类问题,请将C ++ 11 auto用作迭代器作为循环控制变量。

<小时/>

其他评论。

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

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