2010-08-05 7 views
4

У меня есть класс шаблона с собственным членом картыкарты <T,T> :: итератор в качестве параметра типа

template <typename T> 
class MyClass 
{ 
public: 
    MyClass(){} 
private: 
    std::map<T,T> myMap; 
} 

Я хотел бы создать приватный метод, который принимает итератор на карту

void MyFunction(std::map<T,T>::iterator &myIter){....} 

Однако это получает ошибку компиляции: идентификатор 'iterator'. Мне не нужно передавать абстрактный итератор, так как MyFunction знает, что это итератор карты (и будет использоваться только как interator для myMap) и будет рассматривать его как таковой (доступ и изменение myIter-> second). Передача myIter-> second на MyFunction недостаточно, так как MyFunction также должен иметь возможность ++ myIter ;.

ответ

7

Компилятор не знает, что std::map<T,T>::iterator - это тип, это может быть что угодно, в зависимости от того, что такое std::map<T,T>. Вы должны указать это явно с помощью typename std::map<T,T>::iterator.

1

Вы должны добавить ключевое слово "typename" перед std :: map < T, T > :: итератор в списке параметров.

2

Вы должны использовать typename:

template <typename T> 
class MyClass 
{ 
public: 
    MyClass(){} 
private: 
    void MyFunction(typename std::map<T,T>::iterator &myIter){....} 

    std::map<T,T> myMap; 
} 
Смежные вопросы