2010-08-05 3 views
4

J'ai une classe de modèle avec un membre de la carte privéecarte <T,T> :: iterator comme type de paramètre

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

Je voudrais créer une méthode privée qui accepte un itérateur à la carte

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

Cependant, ceci génère une erreur de compilation: identifiant 'itérateur'. Je n'ai pas besoin de passer un itérateur abstrait car MyFunction sait qu'il s'agit d'un itérateur de carte (et ne sera utilisé que comme un interacteur pour myMap) et le traitera comme tel (accédant et modifiant myIter-> second). Passer myIter-> second à MyFunction n'est pas suffisant car MyFunction devra également être capable de ++ myIter ;.

Répondre

7

Le compilateur ne sait pas que std::map<T,T>::iterator est un type, il pourrait être n'importe quoi en fonction de ce que std::map<T,T> est. Vous devez spécifier cela explicitement avec typename std::map<T,T>::iterator.

1

Vous devez ajouter le mot-clé "typename" avant std :: map < T, T > :: itérateur dans la liste des paramètres.

2

Vous devez utiliser typename:

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

    std::map<T,T> myMap; 
} 
Questions connexes