переменная не была объявлена в этой области

0

У меня есть следующий код:

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 реализованы мной)

  • 1
    Какой тип elements ? Вашему вопросу не хватает контекста.
  • 1
    Можем ли мы иметь полный контрольный пример, пожалуйста.
Показать ещё 2 комментария
Теги:
iterator

3 ответа

2

Проблема.

Заявление

typename List<Pair>::Iterator Iterator;

объявляет Iterator как переменную.

Это уже не тип.


Фикс.

Вы имели в виду написать typedef, а не typename?

Это установит непосредственную проблему, но не будущие проблемы такого рода.

Чтобы избежать таких проблем, используйте С++ 11 auto для итераторов в качестве переменных управления контуром.


Другие комментарии.

Вместо явного использования new и delete для реализации массива с динамическим размером рассмотрим только использование std::vector. Гораздо удобнее, безопаснее и т.д. И т.д. Меньше работы, приятнее!

  • 0
    Отличное объяснение / решение.
1

"Итератор" - это iterator c++? Потому что, если это так, то тогда, где проблема. Используйте ключевое слово auto для j, и оно должно это сделать.

Причина, по которой он дает вам ошибку, состоит в том, что итератор не полностью/правильно объявлен/инициализирован.

помните, что итераторы - это классы шаблонов, поэтому вы должны немедленно знать, что для этого требуется хотя бы один параметр шаблона, т.е. forward_list<int>::iterator.

  • 0
    +1 за исправление так себе
0

Если Iterator не полностью определен, вы можете получить эту ошибку. Обычно вы увидите ошибки в том, что тип еще не определен до этого.

Или, может быть, если вы используете древний компилятор MS.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню