2010-09-22 7 views
0

Comment je retourne fonction formulaire iterator:retourner un itérateur

i Worte ceci: . ..

template<class S,class T> class Database { 
public: 
. 
.. 
map<S,Node<T>*> m_map::iterator Find (S keyToFind); 
. 
.. 
.... 


private: 
. 
.. 
map<S,Node<T>*> m_map; 
.. 
. 
}; 

. 
.. 
template<class S,class T> 
map<S,Node<T>*> m_map::iterator Find (S keyToFind) { 
map<S,Node<T>*>::iterator itMap; 
itMap = m_map.find(KeyToUpDate); 
return itMap; 
} 
.. 
. 

il y a beaucoup erreur car ceci: erreur 1 erreur C2653: 'm_map': n'est pas un nom de classe ou espace de noms Erreur 2 Erreur C2146: erreur de syntaxe: manquant ';' avant l'identificateur 'Find' Erreur 3 Erreur C4430: spécificateur de type manquant - int supposé. Note: C++ ne supporte pas default- Erreur 5 Erreur C2653: 'm_map': n'est pas un nom de classe ou espace de noms Erreur 7 Erreur C2133: 'itérateur': taille inconnue .. ...

i don comprends pas quel est le problème ..

Répondre

2

Cela devrait être:

template<class S,class T> 
typename map<S,Node<T>*>::iterator Find(S keyToFind) { 
    typename map<S,Node<T>*>::iterator itMap; 
    itMap = m_map.find(KeyToUpDate); 
    return itMap; 
} 

et

typename map<S,Node<T>*>::iterator Find (S keyToFind); 

typename est nécessaire parce que iterator est un type à charge, voir par exemple here.

3

Votre fonction Find doit être définie comme:

template<class S,class T> 
typename map<S,Node<T>*>::iterator Find (S keyToFind) { 
    map<S,Node<T>*>::iterator itMap; 
    itMap = m_map.find(KeyToUpDate); 
    return itMap; 
} 

sans le « m_map » que vous aviez dans le cadre du type de retour de la fonction.

Éditer: Bien que réellement, il ne soit pas nécessaire de créer l'itérateur temporaire itMap; vous pouvez renvoyer le résultat de find directement. En outre, je pense que KeyToUpDate devrait plutôt être keyToFind. Faire ces modifications, vous finiriez avec:

template<class S,class T> 
typename map<S,Node<T>*>::iterator Find (S keyToFind) { 
    return m_map.find(keyToFind); 
} 
6

On dirait que vous voulez:

typename map<S,Node<T>*>::iterator 

Vous devriez vraiment nettoyer ce genre de choses de utilisation typedef jusqu'à:

template<class S, class T> 
class Database 
{ 
public: 
    // I hope you have't put `using namespace std;` in a header... 
    typedef std::map<S, Node<T>*> map_type; 
    typedef typename map_type::iterator iterator; 
    // etc... 

    // use references to avoid copying 
    iterator Find (const S& keyToFind); 
private: 
    map_type m_map; 
}; 
+0

commentaire devrait d'abord être «J'espère que vous n'avez pas mis « using namespace std 'dans un en-tête. " J'espère. –

+0

@Zan: Ha, merci. :) – GManNickG

Questions connexes