шаблонная printMap не компилируется

0

Пытаясь реализовать класс printMap, который, очевидно, должен печатать содержимое карт, которые я использую, он не компилировал жалобы на типы входов в std :: map <> :: iterator. Как мне избавиться от этой проблемы и собрать ее?

template <class tagType, class valueType>
void printMap (const std::map<tagType, valueType>& myMap)
{
    if (myMap.size()== 0)
        return;
    if (DEBUG_PRINT) {
    std::map<tagType, valueType>::const_iterator it = myMap.begin();
    std::map<tagType, valueType>::const_iterator itEnd = myMap.end();
    std::cout << "================================================================================" << std::endl;
    for (; it != itEnd; it++)
        std::cout << (*it).first << ":" << (*it).second << std::endl;
    std::cout << "================================================================================" << std::endl;
    }
    return;
}

error: требуется 'typename before' std :: map :: const_iterator, потому что 'std :: map - зависимая область действия std :: map :: const_iterator it = myMap.begin(); ^

Теги:
stdmap

2 ответа

1
Лучший ответ

Таким образом, вы также можете использовать следующий цикл
for(__typeof(myMap.begin()) it = (myMap.begin()); it!= myMap.end(); it++)
* объявлена новой переменной (указатель) it, который равен размеру myMap.begin(), цикл будет увеличиваться, чтобы пока it не отличается от myMap.end()

  • 0
    Это сработало! Спасибо !
0

Кажется, что вам нужно " typename before" std::map::const_iterator потому что " std::map - зависимая область.

Это означает, что const_iterator не известен до тех пор, пока шаблон не будет создан, поэтому вам нужно упомянуть, что это фактически тип (иначе он считается переменной).

В вашем примере:

typename std::map<tagType, valueType>::const_iterator it = myMap.begin();
  • 0
    Вы только что переписали мне сообщение об ошибке в другом формате? Я знаю это. Как (и возможно ли) это исправить?
  • 0
    @navderm Да, я сделал. Потому что он точно говорит вам, что делать: когда вы используете тип, который находится внутри шаблонного класса, вам нужно поставить перед ним префикс typename .
Показать ещё 3 комментария

Ещё вопросы

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