Пытаясь реализовать класс 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(); ^
Таким образом, вы также можете использовать следующий цикл for(__typeof(myMap.begin()) it = (myMap.begin()); it!= myMap.end(); it++)
* объявлена новой переменной (указатель) it
, который равен размеру myMap.begin()
, цикл будет увеличиваться, чтобы пока it
не отличается от myMap.end()
Кажется, что вам нужно " typename
before" std::map::const_iterator
потому что " std::map
- зависимая область.
Это означает, что const_iterator
не известен до тех пор, пока шаблон не будет создан, поэтому вам нужно упомянуть, что это фактически тип (иначе он считается переменной).
В вашем примере:
typename std::map<tagType, valueType>::const_iterator it = myMap.begin();
typename
.