У меня проблемы с использованием закрытой переменной std :: map из шаблона класса.Может кто-нибудь объяснить, почему следующее (упрощенный пример) не работает, и что я должен делать вместо этого?
#include <iostream>
#include <map>
template <class T>
class Container
{
private:
typedef std::map<long, T> Map;
typedef Map::iterator Iterator; // <-- this is line 10
Map items;
public:
void insert(const long id, const T& item) { items[id] = item; }
void print()
{
for (Iterator iter = items.begin(); iter != items.end(); iter++)
{ std::cout << iter->second << std::endl; }
}
};
int main()
{
Container<int> container;
container.insert(300, 1);
container.insert(200, 2);
container.insert(100, 3);
container.print();
return 0;
}
Полученная ошибка несколько загадочна:
t.cpp: 10: ошибка: тип 'std :: map, std :: allocator>>' не является производным от типа 'Container'
t.cpp: 10: ошибка: ISO C ++ запрещаетобъявление 'iterator' без типа
t.cpp: 10: ошибка: ожидается ';'перед "Итератором"